7

Chúng tôi có một công cụ kiểm tra xem URL đã cho có phải là URL trực tiếp hay không. Nếu một url nhất định đang hoạt động, một phần khác của phần mềm của chúng tôi có thể sàng lọc nội dung từ đó.Bắt lỗi "Máy chủ từ xa trả về lỗi: (403) Cấm" khi cạo màn hình bằng cách sử dụng HttpWebRequest.GetResponse()

Đây là mã của tôi để kiểm tra nếu một url là sống

public static bool IsLiveUrl(string url) 
    { 
     HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest; 
     webRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5"; 
     webRequest.CookieContainer = new CookieContainer(); 
     WebResponse webResponse; 
     try 
     { 
      webResponse = webRequest.GetResponse(); 
     } 
     catch (WebException e) 
     { 
      return false; 
     } 
     catch (Exception ex) 
     { 

      return false; 
     } 
     return true; 
    } 

Mã này hoạt động hoàn hảo nhưng đối với một trang web cụ thể được lưu trữ trên apache tôi đang nhận được một ngoại lệ web với sau thông điệp. "Các máy chủ từ xa trở về một lỗi: (403) Forbidden" On kiểm tra hơn nữa tôi tìm thấy các chi tiết sau đây trong các đối tượng WebException

Status = "ProtocolError" StatusDescription = "Hành vi xấu"

Đây là yêu cầu tiêu đề "Tác nhân người dùng: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv: 1.8.0.6) Gecko/20060728 Firefox/1.5 Máy chủ: scenicspares.co.uk Kết nối: Giữ sống"

Đây là tiêu đề phản hồi "Keep-Alive: timeout = 4, max = 512 Kết nối: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html ngày: Thu, 13 tháng một 2011 10:29:36 GMT Server: Apache"

tôi trích ra các tiêu đề sử dụng một chiếc đồng hồ trong vs2008. Công việc khung được sử dụng là 3.5.

Trả lời

13

Hóa ra là tất cả tôi cần làm là sau

  webRequest.Accept = "*/*"; 
      webResponse = webRequest.GetResponse(); 

và nó đã được cố định.

+0

Xin chào @syed, tôi gặp phải vấn đề tương tự và đã thêm mã .Accept, nhưng tôi vẫn gặp lỗi này. Bất kỳ ý tưởng? cảm ơn – swdev

+5

OK, tôi phải thêm ba dòng này, 'webRequest.Method = "GET"; webRequest.UserAgent = "Foo"; webRequest.Accept = "text/html"; 'Máy chủ khác nhau có thể yêu cầu thiết lập khác nhau – swdev

+1

Cảm ơn swdev. Mẹo của bạn dường như giải quyết vấn đề với một số trang wikipedia. – newman

Các vấn đề liên quan