[英]python urllib2: connection reset by peer
我有一個 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);
我寫的 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() function 可以透明地與不需要身份驗證的代理一起工作。 現在我感覺很混亂。 有人可以幫我解決這個問題嗎?
我嘗試按照 Uku Loskit 和 Mikko Ohtamaa 的建議偽造 User-Agent 標頭,並解決了我的問題。 代碼如下:
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
希望對其他人有用!
首先,正如史蒂夫所說,你需要 response.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()
來源: http://www.voidspace.org.uk/python/articles/urllib2.shtml
(我把它放在評論中,但它吃掉了我的換行符)
您可能會發現requests模塊是 urllib2 的更易於使用的替代品。
您是否嘗試手動指定代理?
proxy = urllib2.ProxyHandler({'http': 'your_proxy_ip'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.uni-database.com')
如果仍然失敗,請嘗試偽造您的 User-Agent 標頭,以使請求看起來像是來自真實的瀏覽器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.