2013-02-18 83 views
2

我試圖通過代理使用urllib2;然而,在嘗試使用urllib2來通過我的驗證細節的每一個變化之後,我要麼獲得永久掛起並且什麼都不返回的請求,要麼我得到407 Errors。我可以使用連接到prox-pac並重定向的瀏覽器連接到網絡。然而,我似乎無法通過命令行curl,wget,urllib2等做任何事情,即使我使用prox-pac重定向到的代理。我嘗試使用urllib2將代理設置爲來自pac文件的所有代理,但其中沒有一個可以工作。通過代理使用urllib2

我現在的劇本是這樣的:

import urllib2 as url 

proxy = url.ProxyHandler({'http': 'username:[email protected]:8080'}) 
auth = url.HTTPBasicAuthHandler() 
opener = url.build_opener(proxy, auth, url.HTTPHandler) 
url.install_opener(opener) 
url.urlopen("http://www.google.com/") 

會拋出HTTP Error 407: Proxy Authentication Required,我也試過:

import urllib2 as url 

handlePass = url.HTTPPasswordMgrWithDefaultRealm() 
handlePass.add_password(None, "http://my.proxy:8080", "username", "password") 
auth_handler = url.HTTPBasicAuthHandler(handlePass) 
opener = url.build_opener(auth_handler) 
url.install_opener(opener) 
url.urlopen("http://www.google.com") 

它掛像curlwget超時。

我需要做些什麼來診斷問題?我怎麼可能通過我的瀏覽器進行連接,而不是通過同一臺計算機上的命令行進行連接,而使用看起來相同的代理和憑證?

可能與路由器有關嗎?如果是這樣,請問如何區分瀏覽器HTTP請求和命令行HTTP請求?

回答

3

像這樣的沮喪是什麼驅使我使用Requests。如果你正在用urllib2做大量的工作,你真的應該檢查出來。例如,你想使用的要求做什麼,你可以寫:

import requests 
from requests.auth import HTTPProxyAuth 

proxy = {'http': 'http://my.proxy:8080'} 
auth = HTTPProxyAuth('username', 'password') 
r = requests.get('http://wwww.google.com/', proxies=proxy, auth=auth) 
print r.text 

或者你可以將它包裝在一個Session對象,每個請求將自動使用代理信息(加上它將存儲&處理Cookie自動!):

s = requests.Session(proxies=proxy, auth=auth) 
r = s.get('http://www.google.com/') 
print r.text