获取错误"使用HttpWebRequest.GetResponse()进行屏幕抓取时,远程服务器返回错误:(403)禁止"

Sye*_*bar 9 c# screen-scraping httpwebrequest httpwebresponse http-status-code-403

我们有一个工具可以检查给定的URL是否是实时URL.如果给定的网址是实时的,我们软件的另一部分可以屏蔽其中的内容.

这是我检查网址是否有效的代码

    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;
    }
Run Code Online (Sandbox Code Playgroud)

这段代码完美无缺,但是对于在apache上托管的特定站点,我收到了一个带有以下消息的Web异常."远程服务器返回错误:(403)Forbidden"在进一步检查时,我在WebException对象中找到了以下详细信息

Status ="ProtocolError"StatusDescription ="不良行为"

这是请求标题"User-Agent:Mozilla/5.0(Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6)Gecko/20060728 Firefox/1.5主机:scenicspares.co.uk连接:Keep-Alive "

这是响应标题"Keep-Alive:timeout = 4,max = 512 Connection:Keep-Alive Transfer-Encoding:chunked Content-Type:text/html Date:Thu,13 Jan 2011 10:29:36 GMT Server:Apache "

我在vs2008中使用手表提取了这些标题.使用的框架工作是3.5.

Sye*_*bar 14

事实证明,我需要做的就是遵循

            webRequest.Accept = "*/*";
            webResponse = webRequest.GetResponse();
Run Code Online (Sandbox Code Playgroud)

它是固定的.

  • 知道了,我必须添加这三行,`webRequest.Method ="GET"; webRequest.UserAgent ="Foo"; webRequest.Accept ="text/html";`不同的服务器可能需要不同的设置 (5认同)