首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HttpWebRequest.GetResponse()抓取屏幕时出现错误“远程服务器返回错误:(403)禁止”

使用HttpWebRequest.GetResponse()抓取屏幕时出现错误“远程服务器返回错误:(403)禁止”
EN

Stack Overflow用户
提问于 2011-01-13 18:35:07
回答 3查看 31.4K关注 0票数 9

我们有一个工具可以检查给定的URL是否是活动URL。如果一个给定的url是活动的,我们软件的另一部分可以从它的屏幕上删除内容。

这是我用于检查url是否有效的代码。

代码语言:javascript
复制
    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;
    }

此代码运行良好,但对于apache上托管的特定站点,我收到以下消息的web异常。在进一步的检查中,我在WebException对象中发现了以下详细信息

Status="ProtocolError“StatusDescription="Bad Behaviour”

这是请求头“用户代理: Mozilla/5.0 ( Windows;U;Windows NT5.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:清华,13 Jan 2011 10:29:36 GMT服务器: Apache“

我在vs2008中使用手表提取了这些头文件。使用的框架是3.5。

EN

回答 3

Stack Overflow用户

发布于 2011-01-13 18:55:06

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

代码语言:javascript
复制
            webRequest.Accept = "*/*";
            webResponse = webRequest.GetResponse();

而且它已经修好了。

票数 13
EN

Stack Overflow用户

发布于 2015-01-11 08:37:18

我相信有相当多的类似问题依赖于服务器应用程序。在我的特殊情况下,请参阅:The remote server returned an error: (403) Forbidden

票数 0
EN

Stack Overflow用户

发布于 2021-06-28 12:33:30

我为我的web scraping应用程序修复了这个问题,在面对这个问题一天之后,希望它能对其他人有所帮助:

代码语言:javascript
复制
    public static string GetPageContent(string url)
    {
        CookieContainer cookieContainer = new CookieContainer();
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
        request.CookieContainer = cookieContainer; // after Create() method
        request.AllowAutoRedirect = true; //  should be true
        request.UserAgent= ".NET Framework Test Client"; // should not be null

        var responseStr = string.Empty;
        using (var response = request.GetResponse())
        {
            Stream dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);
            responseStr = reader.ReadToEnd();
            reader.Close();
            dataStream.Close();
        }
        return responseStr;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4679085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档