2017-07-16 79 views
0

我试图发送一个GET请求来下载的http://footlocker.com/ HTML内容:奇403错误使用Web客户端

Console.WriteLine(new WebClient().DownloadString("http://footlocker.com")); 

但我得到一个403错误。为了测试,我使用Python,试图发送一个GET请求(请求库),我成功地获得了200响应以及HTML内容:

r = requests.get('http://footlocker.com') 
print(r.text) 

要看到差距,我印在Python头要求,这就是我的了:

{'User-Agent': 'python-requests/2.13.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} 

于是,我就派与Python的Web客户端请求需要用户代理字符串:

WebClient wc = new WebClient(); 
wc.Headers[HttpRequestHeader.UserAgent] = "python-requests/2.13.0"; 
Console.WriteLine(wc.DownloadString("http://footlocker.com")); 

但我仍然有403什么可能Python的请求库和WebClient之间的区别?我在这里错过了很明显的东西吗这是为什么发生?

+0

如果问题出在头也许这将帮助'wc.Headers.Add(“用户 - 代理:python-requests/2.13.0“);',基本上你可以尝试复制Python输入的头文件 – thunderbird

+0

它给出了一个错误:'指定的值具有无效的HTTP头字符。'所以我将它改为'wc .Headers.Add(“User-Agent”,“python-requests/2.13.0”);'我得到了一个403. – RaghavJhavar

回答

1

想通了,要加这个头需要:

wc.Headers.Add("Accept", "*/*"); 

最终代码:

WebClient wc = new WebClient(); 
wc.Headers.Add("User-Agent", "python-requests/2.13.0"); 
wc.Headers.Add("Accept", "*/*"); 
Console.WriteLine(wc.DownloadString("http://footlocker.com")); 
+0

它窝如果你使用[HttpClient]会更好(https://stackoverflow.com/questions/20530152/need-help-deciding-between-httpclient-and-webclient) – Givi