我有一个perl程序从我的大学图书馆的数据库中检索数据,它运作良好.现在我想在python中重写它但遇到问题
<urlopen error [errno 104] connection reset by peer>
perl代码是:
my $ua = LWP::UserAgent->new;
$ua->cookie_jar( HTTP::Cookies->new() );
$ua->timeout(30);
$ua->env_proxy;
my $response = $ua->get($url);
Run Code Online (Sandbox Code Playgroud)
我写的python代码是:
cj = CookieJar();
request = urllib2.Request(url); # url: target web page
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
opener = urllib2.install_opener(opener);
data = urllib2.urlopen(request);
Run Code Online (Sandbox Code Playgroud)
我使用VPN(虚拟专用网络)在家里登录我的大学图书馆,我尝试了perl代码和python代码.perl代码按我的预期工作,但python代码总是遇到"urlopen错误".
我搜索了问题,似乎urllib2无法加载环境代理.但是根据urllib2的文档,urlopen()函数可以透明地使用不需要身份验证的代理.现在我感到很困惑.任何人都可以帮我解决这个问题吗?
我尝试伪造用户代理标题,如Uku Loskit和Mikko Ohtamaa建议,并解决了我的问题.代码如下:
proxy = "YOUR_PROXY_GOES_HERE"
proxies = {"http":"http://%s" % proxy}
headers={'User-agent' : 'Mozilla/5.0'}
proxy_support = urllib2.ProxyHandler(proxies)
opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler(debuglevel=1))
urllib2.install_opener(opener)
req = urllib2.Request(url, None, headers)
html = urllib2.urlopen(req).read()
print html
Run Code Online (Sandbox Code Playgroud)
希望它对别人有用!
| 归档时间: |
|
| 查看次数: |
17957 次 |
| 最近记录: |