我想使用HttpClient
与网站进行交互。这是在公司类型的环境中,所有的Web访问都通过一个Web代理。默认情况下,HttpClient和WebClient似乎都只是在这里使用代理 - 但我也在代码中指定了代理细节。HttpClient/WebClient - 通过代理与网站进行交互的问题
我的问题是,一些URL将正确加载,其他人不会。以下代码显示了我的意思。
var webc = new WebClient();
var x1 = webc.DownloadString("http://www.google.com"); // Works
var x2 = webc.DownloadString("http://www.google.ie"); // Works
var x3 = webc.DownloadString("http://maps.google.com"); // Works
var x4 = webc.DownloadString("http://maps.google.ie"); // 403 Forbidden exception
我看到与HttpClient相同的行为,但代码更详细。如果我获取403错误中返回的HTML,则表示我没有进行身份验证,并显示我的用户名为空。
使用Chrome/FF/IE - 我可以浏览所有四个示例URL。代理不阻止我,或显示相同的错误消息。
看起来代码只有在没有“www”子域名的网站上失败 - 当它是非.com网站时。听起来很疯狂。
我试图在本地运行菲德勒,看看什么是请求之间的不同 - 从我所看到的 - 它看起来相同,除了网址:
GET http://maps.google.ie/ HTTP/1.1主机:地图.google.ie 代理连接:保持活动
GET http://www.google.com/ HTTP/1.1主机:www.google.com 代理连接:保持活动
在'Auth'标签提琴手显示:
没有代理授权标头存在。
否授权标题存在。
对于两者。但是这个.com例子很有用。 .ie示例失败。我试图在Chrome拉起相同maps.google.ie URL - 伟大的工程,我可以看到它有一个代理授权,在它的GET
GET http://maps.google.ie/ HTTP/1.1主机:maps.google。即 代理连接:保持活跃代理授权:NTLM T3RMTVNTUAAFAAACB4IBogQABAAzAAAACwALACgAAAAGAbFdAAAAD1BBVUxTT01xOTlEU1UTUR ==
谁能告诉我这是怎么回事?如果该代理授权是我所需要的,那么我如何让HttpClient/WebClient包含它? 我试过创建一个WebProxy并在其上设置凭证 - 与CredentialCache一起提供用户名/密码/域名(以及我想到的域名的每个变体)。当我得到它'错误' - 所有网站似乎返回403.但是,当我得到它的权利 - 前3名工作和第四名不。在Fiddler中,我永远无法在我所做的任何请求中看到代理授权 - 但它仍然适用于前三个网站。
我确定我错过了一些东西,但我不知所措。任何帮助将非常感激。
您的IT部门需要修复其代理服务器! –