WebRequest.GetResponse - 远程服务器返回错误:(404)未找到

Posted

技术标签:

【中文标题】WebRequest.GetResponse - 远程服务器返回错误:(404)未找到【英文标题】:WebRequest.GetResponse - The remote server returned an error: (404) Not Found 【发布时间】:2017-09-07 20:37:31 【问题描述】:

我正在尝试连接到一个网站,但即使我可以在浏览器中访问该网站,它仍然会返回此错误:

System.dll 中出现“System.Net.WebException”类型的异常 但未在用户代码中处理

附加信息:远程服务器返回错误:(404) Not 找到了。

我很确定我的代码是正确的,因为我最近经常使用相同的代码,但无法弄清楚为什么它返回错误,有什么建议吗? 我的代码:

OddsTodayREQUEST = WebRequest.Create("http://www.betexplorer.com/next/soccer/")
Using OddsTodayRESPONSE As WebResponse = OddsTodayREQUEST.GetResponse()
            Using OddsTodayREADER As New StreamReader(OddsTodayRESPONSE.GetResponseStream())
                OddsTodayhtml = OddsTodayREADER.ReadToEnd()
            End Using
        End Using

【问题讨论】:

404 = 页面不存在。您可以在浏览器中点击该网站上的确切页面吗? 是的,我可以在浏览器中访问它 【参考方案1】:

站点希望将用户代理添加到请求中。你可以谷歌What's my user agent? 找到你自己的并像这样添加它:

OddsTodayREQUEST.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"

【讨论】:

非常感谢您对我的帮助,最好包括一个用户代理来抓取所有这样的网站还是只包括需要用户代理的网站?如果是后者,你怎么知道网站需要一个? 如果您想复制 Web 浏览器的功能,我建议您包含用户代理。此外,我只能通过测试确定该网站是否需要它。我得到了和你一样的 404 错误,所以我添加了一个用户代理并且它工作了。 太棒了,感谢您抽出宝贵的时间,我会把它包含在以后的所有项目中 哇,老兄,你让我很开心,我一直在努力解决这个问题,就这么简单。您的解决方案解决了我的问题。谢谢。【参考方案2】:

您需要将UserAgent添加为@ChaseRocker mentioned,除了他的回答,最好使用HttpWebClient的AutomaticDecompression属性,您可以添加Accept header。我还在Using 语句中使用了OddsTodayRESPONSE.GetResponseStream()

Dim OddsTodayREQUEST As HttpWebRequest = WebRequest.Create("http://www.betexplorer.com/next/soccer/")
OddsTodayREQUEST.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
OddsTodayREQUEST.AutomaticDecompression = DecompressionMethods.GZip Or DecompressionMethods.Deflate 'Decompressing makes the request be done faster
OddsTodayREQUEST.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0"
Using OddsTodayRESPONSE As HttpWebResponse = OddsTodayREQUEST.GetResponse()
    Using OddsTodayRESPONSESTREAM = OddsTodayRESPONSE.GetResponseStream()
        Using OddsTodayREADER As New StreamReader(OddsTodayRESPONSESTREAM)
            OddsTodayHTML = OddsTodayREADER.ReadToEnd()
        End Using
    End Using
End Using

【讨论】:

非常感谢您的解释,现在完美运行。

以上是关于WebRequest.GetResponse - 远程服务器返回错误:(404)未找到的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 400错误

C# 无法从 API 调用读取 json 响应

C#写爬虫,版本V2.1