在python中爲http連接指定具有用戶名和密碼的代理服務器的最佳方式是什麼?如何爲python http連接指定經過身份驗證的代理?
45
A
回答
56
這個工作對我來說:
import urllib2
proxy = urllib2.ProxyHandler({'http': 'http://
username:[email protected]:proxyport'})
auth = urllib2.HTTPBasicAuthHandler()
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)
conn = urllib2.urlopen('http://python.org')
return_str = conn.read()
9
的經歷需要身份驗證的代理使用urllib2建立一個定製URL開啓,然後使用該做所有你想通過這些請求的最佳方式代理人。特別要注意的是,您可能不希望將代理密碼嵌入到url或python源代碼中(除非它只是一個快速破解)。
import urllib2
def get_proxy_opener(proxyurl, proxyuser, proxypass, proxyscheme="http"):
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, proxyurl, proxyuser, proxypass)
proxy_handler = urllib2.ProxyHandler({proxyscheme: proxyurl})
proxy_auth_handler = urllib2.ProxyBasicAuthHandler(password_mgr)
return urllib2.build_opener(proxy_handler, proxy_auth_handler)
if __name__ == "__main__":
import sys
if len(sys.argv) > 4:
url_opener = get_proxy_opener(*sys.argv[1:4])
for url in sys.argv[4:]:
print url_opener.open(url).headers
else:
print "Usage:", sys.argv[0], "proxy user pass fetchurls..."
在更復雜的程序,可以單獨這些組件進行適當的(例如,僅可使用應用程序的生命週期一個密碼管理器)。 python文檔有more examples on how to do complex things with urllib2,你可能也會覺得有用。
3
或者,如果你想安裝它,所以它總是與urllib2.urlopen使用(這樣你就不會需要參考保持到了揭幕戰左右):
import urllib2
url = 'www.proxyurl.com'
username = 'user'
password = 'pass'
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
# None, with the "WithDefaultRealm" password manager means
# that the user/pass will be used for any realm (where
# there isn't a more specific match).
password_mgr.add_password(None, url, username, password)
auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
print urllib2.urlopen("http://www.example.com/folder/page.html").read()
13
設置環境VAR命名HTTP_PROXY這樣的:HTTP://用戶名:密碼@ proxy_url:端口
1
這裏是方法使用的urllib
import urllib.request
# set up authentication info
authinfo = urllib.request.HTTPBasicAuthHandler()
proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"})
# build a new opener that adds authentication and caching FTP handlers
opener = urllib.request.build_opener(proxy_support, authinfo,
urllib.request.CacheFTPHandler)
# install it
urllib.request.install_opener(opener)
f = urllib.request.urlopen('http://www.python.org/')
"""
0
使用此:
import requests
proxies = {"http":"http://username:[email protected]_ip:proxy_port"}
r = requests.get("http://www.example.com/", proxies=proxies)
print r.content
我認爲這是比使用urllib
簡單得多。我不明白爲什麼人們喜歡使用urllib
這麼多。
相關問題
- 1. 全局設置連接到經過身份驗證的代理
- 2. 如何在經過身份驗證的HTTP代理後面配置Emacs?
- 3. 如何使用suds(Python)對HTTP代理進行身份驗證?
- 4. NodeJs HTTP代理基本身份驗證
- 5. Python身份驗證和HTTP cookie處理
- 6. 通過NTLM身份驗證代理服務器進行HTTP連接
- 7. 通過經過身份驗證的代理debootstrap
- 8. 使用FreeMarker連接到經過身份驗證的URL
- 9. 通過使用反向代理繞過http身份驗證
- 10. 在經過身份驗證的HTTP代理之後開發AWS應用程序
- 11. 在經過身份驗證的HTTP代理後面安裝ADT插件
- 12. 使用基本身份驗證和代理身份驗證的駱駝Http
- 13. 使用Windows身份驗證的簡單身份驗證代理
- 14. 如何拒絕未經身份驗證的連接到mongodb
- 15. Python中的HTTP代理服務器(帶身份驗證)
- 16. Python Selenium Webdriver - 代理身份驗證
- 17. CEF Python代理身份驗證
- 18. Facebook身份驗證/連接
- 19. org.apache.http.impl.client.CloseableHttpClient代理身份驗證
- 20. Authlogic - 通過基本HTTP身份驗證進行身份驗證
- 21. 通過經典ASP連接到SQL Server(Windows身份驗證)
- 22. Java代理身份驗證
- 23. 請求經過代理時身份驗證錯誤
- 24. cefsharp代理身份驗證
- 25. 身份驗證代理
- 26. Clickonce身份驗證代理
- 27. ssh-add無法打開與身份驗證代理的連接
- 28. 自定義身份驗證 - 用戶登錄但未經過身份驗證
- 29. 通過http代理提升asio ssl身份驗證
- 30. 如何使用普通HTTP身份驗證和PHP在Apache下獲取經過身份驗證的用戶名?
默認情況下添加urllib2.HTTPHandler(請參閱urllib2 doc)。在建造開罐器時加入它似乎是多餘的。 – HongboZhu 2013-09-21 20:46:40
如果不涉及身份驗證,爲什麼使用urllib2.HTTPBasicAuthHandler()? – HongboZhu 2013-09-21 23:25:38