我目前正在嘗試使用Python登錄到一個站點,但該站點似乎是在同一頁面上發送cookie和重定向語句。 Python似乎在跟蹤重定向,從而阻止我閱讀登錄頁面發送的cookie。如何防止Python的urllib(或urllib2)從重定向後urlopen?如何防止Python的urllib(2)跟隨重定向
回答
你可以做兩件事情:
- 構建自己化HTTPRedirectHandler截取每個重定向
- 創建HTTPCookieProcessor的實例,並安裝揭幕戰,讓你有機會獲得cookiejar。
這是顯示兩個
import urllib2
#redirect_handler = urllib2.HTTPRedirectHandler()
class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_302(self, req, fp, code, msg, headers):
print "Cookie Manip Right Here"
return urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers)
http_error_301 = http_error_303 = http_error_307 = http_error_302
cookieprocessor = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(MyHTTPRedirectHandler, cookieprocessor)
urllib2.install_opener(opener)
response =urllib2.urlopen("WHEREEVER")
print response.read()
print cookieprocessor.cookiejar
你在這個例子中似乎沒有使用`redirect_handler = urllib2.HTTPRedirectHandler()`。你打算展示第二個例子嗎? – 2011-08-16 21:13:06
urllib2.urlopen
調用build_opener()
它使用處理類名單:
handlers = [ProxyHandler, UnknownHandler, HTTPHandler,
HTTPDefaultErrorHandler, HTTPRedirectHandler,
FTPHandler, FileHandler, HTTPErrorProcessor]
你可以嘗試一下,它省略HTTPRedirectHandler
列表調用urllib2.build_opener(handlers)
,然後調用結果的open()
方法來打開你的網址。如果你真的不喜歡重定向,你甚至可以撥打urllib2.install_opener(opener)
給你自己的非重定向開叫者。
聽起來像你真正的問題是,urllib2
不按你喜歡的方式做餅乾。另請參見參考How to use Python to login to a webpage and retrieve cookies for later usage?
*你可以嘗試使用一個省略HTTPRedirectHandler的列表來自己調用urllib2.build_opener(處理程序),然後調用open()方法在結果打開你的URL。*好吧,文檔爲urllib2。build_opener()說*下面的類**的實例將在處理程序**之前,除非處理程序包含它們,它們的實例或它們的子類:ProxyHandler,UnknownHandler,HTTPHandler,HTTPDefaultErrorHandler,HTTPRedirectHandler,FTPHandler,FileHandler ,HTTPErrorProcessor。*它看起來像忽略'HTTPRedirectHandler`將不起作用... – 2011-04-01 17:57:53
如果你需要的是停止重定向一個快速的小東西,然後有一個簡單的方法來做到這一點。例如,我只想獲取cookie並獲得更好的性能,我不想將其重定向到任何其他頁面。我也希望代碼保持爲3xx。例如,我們使用302。
class MyHTTPErrorProcessor(urllib2.HTTPErrorProcessor):
def http_response(self, request, response):
code, msg, hdrs = response.code, response.msg, response.info()
# only add this line to stop 302 redirection.
if code == 302: return response
if not (200 <= code < 300):
response = self.parent.error(
'http', request, response, code, msg, hdrs)
return response
https_response = http_response
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj), MyHTTPErrorProcessor)
這樣,你甚至不需要進入urllib2.HTTPRedirectHandler.http_error_302()
然而更常見的情況是,我們只是想阻止重定向(根據需要):
class NoRedirection(urllib2.HTTPErrorProcessor):
def http_response(self, request, response):
return response
https_response = http_response
,通常使用這種方式:
cj = cookielib.CookieJar()
opener = urllib2.build_opener(NoRedirection, urllib2.HTTPCookieProcessor(cj))
data = {}
response = opener.open('http://www.example.com', urllib.urlencode(data))
if response.code == 302:
redirection_target = response.headers['Location']
- 1. 防止HttpClient 4跟隨重定向
- 2. 如何防止WCF代理跟隨重定向?
- 3. 跟隨python硒phantomjs腳本重定向
- 4. 如何防止urllib2跟蹤http請求的重定向?
- 5. 如何防止git日誌 - 跟隨副本,但只跟隨重命名?
- 6. 如何防止從特定網頁重定向python腳本?
- 7. 人們如何防止307重定向
- 8. Angular2,如何防止HTTP重定向
- 9. htaccess:如何防止遞歸重定向?
- 10. jQuery Mobile hijax重定向 - 如何防止?
- 11. 的urllib重定向錯誤
- 12. 如何使用urllib重定向?
- 13. 防止Xmlhttprequest重定向
- 14. 防止主機重定向
- 15. 防止網站重定向
- 16. 防止重定向到site.mobile.master
- 17. 硒防止重定向
- 18. 防止主頁重定向
- 19. WebRequest - 防止重定向
- 20. 如何用python/urllib狀態碼仍然處理重定向200?
- 21. Rspec redirect_to跟隨多個重定向
- 22. Ruby Curb沒有跟隨重定向
- 23. PHP:CURL可以跟隨元重定向
- 24. 使用urllib刮取Metacritic以跟蹤重定向
- 25. 如何跟隨測試的重定向:WWW :: Mechanize?
- 26. 如何防止頁面重定向上的socket.io多重連接?
- 27. 如何防止重定向後重復的URL連接?
- 28. 如何防止重定向到JTabbedPane中選定的選項卡?
- 29. mod_rewrite的 - 防止多重定向
- 30. .htaccess友好的URL防止重定向
杜plicate:http://stackoverflow.com/questions/110498/is-there-an-easy-way-to-request-a-url-in-python-and-not-follow-redirects/110808 – 2009-02-16 20:56:42
一個類似的問題: http://stackoverflow.com/questions/9890815/python-get-headers-only-using-urllib2 – newtover 2012-03-28 11:28:47