Python请求模块 - 代理不工作

问题描述:

我试图用python请求连接到网站,但不是用我的真实IP。所以,我发现在互联网上的一些代理,并写了这个代码:Python请求模块 - 代理不工作

import requests 

proksi = { 
    'http': 'http://5.45.64.97:3128' 
} 

x = requests.get('http://www.whatsmybrowser.org/', proxies = proksi) 
print(x.text) 

当我输出,代理简单的不工作。网站返回我的真实IP地址。我做错了什么?谢谢。

答案很简单。虽然它是代理服务,但并不保证100%匿名。当你通过代理服务器发送HTTP GET请求,你的程序发送到代理服务器的请求是:

GET http://www.whatsmybrowser.org/ HTTP/1.1 
Host: www.whatsmybrowser.org 
Connection: keep-alive 
Accept-Encoding: gzip, deflate 
Accept: */* 
User-Agent: python-requests/2.10.0 

现在,当代理服务器发送该请求到实际目的地,它将:

GET http://www.whatsmybrowser.org/ HTTP/1.1 
Host: www.whatsmybrowser.org 
Accept-Encoding: gzip, deflate 
Accept: */* 
User-Agent: python-requests/2.10.0 
Via: 1.1 naxserver (squid/3.1.8) 
X-Forwarded-For: 122.126.64.43 
Cache-Control: max-age=18000 
Connection: keep-alive 

正如你所看到的,它会引发你的IP(在我的情况,122.126.64.43)在HTTP标头:X-Forwarded-For,因此该网站知道该请求是代表122.126.64.43

了解更多关于这个^ h发送EADER在:https://tools.ietf.org/html/rfc7239

如果你想举办自己的Squid代理服务器,并希望禁止设置X-Forwarded-For标题,写着:http://www.squid-cache.org/Doc/config/forwarded_for/