Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python urllib2:对等方重置连接_Python_Urllib2 - Fatal编程技术网

python urllib2:对等方重置连接

python urllib2:对等方重置连接,python,urllib2,Python,Urllib2,我有一个perl程序,可以从我的大学图书馆的数据库中检索数据,而且运行良好。现在我想用python重写它,但遇到了这个问题 perl代码是: my $ua = LWP::UserAgent->new; $ua->cookie_jar( HTTP::Cookies->new() ); $ua->timeout(30); $ua->env_proxy; my $response = $ua->get($url); 我编

我有一个perl程序,可以从我的大学图书馆的数据库中检索数据,而且运行良好。现在我想用python重写它,但遇到了这个问题

perl代码是:

    my $ua = LWP::UserAgent->new;
    $ua->cookie_jar( HTTP::Cookies->new() );
    $ua->timeout(30);
    $ua->env_proxy;
    my $response = $ua->get($url); 
我编写的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); 
我在家里使用VPN(虚拟专用网络)登录我大学的图书馆,并尝试了perl代码和python代码。perl代码按照我的预期工作,但是python代码总是遇到“urlopen错误”


我在谷歌上搜索了这个问题,似乎urllib2无法加载环境代理。但是根据urllib2的文档,urlopen()函数可以透明地处理不需要身份验证的代理。现在我感到很困惑。有人能帮我解决这个问题吗?

首先,正如史蒂夫所说,你需要回复。read(),但这不是你的问题

import urllib2
response = urllib2.urlopen('http://python.org/')
html = response.read()
你能给出错误的详细情况吗?你可以这样得到它:

try:
    urllib2.urlopen(req)
except URLError, e:
     print e.code
     print e.read()
资料来源:


(我把它放在一条评论中,但它吃了我的新行)

您是否尝试手动指定代理

proxy = urllib2.ProxyHandler({'http': 'your_proxy_ip'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.uni-database.com')

如果仍然失败,请尝试伪造您的用户代理标题,以使请求看起来来自真实的浏览器。

我尝试按照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

希望对其他人有用

您可能会发现该模块是一个更易于使用的urllib2替代品。

跳过Python中的分号。他们不会受伤,但他们的状态很差。另外,在执行
urllib.urlopen(request).read()之前,您实际上不会获得任何数据。伪造用户代理头可以解决我的问题。非常感谢你!对于使用请求模块的任何人,请给出一个示例(向下滚动)。