Python HTTP客戶端自定義Cookie實現(xiàn)實例
Python HTTP客戶端自定義Cookie實現(xiàn)實例
幾乎所有腳本語言都提供了方便的 HTTP 客戶端處理的功能,Python 也不例外,使用 urllib 和 urllib2 可以很方便地進行 HTTP GET 和 POST 等各種操作。并且還允許以類似于插件的形式加入一些 handler ,來定制 request 和 response ,比如代理的支持和 cookie 的支持都是這樣添加進來的。具體來說,通過如下方式構(gòu)造一個 opener :
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
然后這個 opener 就可以處理 cookie 了,相當方便,并且可定制性也……好吧,總之,現(xiàn)在我希望能在客戶端手動插入一些 cookie 值,但是不管是 HTTPCookieProcessor 還是 cookielib 里的 CookieJar 都沒有提供類似的方法可以來實現(xiàn)。
看起來,也并不是我一個人有這樣的需求,因為我在查找解決方案的時候,還找到了有人給 Python 提交的這個 Patch,就是添加這個功能。不過看起來好像還沒有被 accept 的樣子,這樣對標準庫做暴力 patch 的方式可移植性似乎也不好。所以我還是另外找了解決方案,其實也很簡單:看了 HTTPCookieProcessor 的實現(xiàn)代碼之后,發(fā)現(xiàn)我可以做類似的事情,也就是在寫一個 handler ,把我想要的 cookie 值強制放到 request 對象的 header 中去。
于是我查了 Python 的文檔,對于 handler 的接口好像幾乎沒有描述,于是我就照著 HTTPCookieProcessor 來寫了。這個 handler 應(yīng)該放在正常的 cookie 處理 handler 的后面,然后檢查已經(jīng)存在的 cookie header ,再進行合并一下。不過比較詭異的是在 Python 的文檔里并沒有找到 Request 對象有 get_header 之類的方法可以得到已經(jīng)存在的 header 項的值,覺得很詭異,于是直接查了源代碼,才找到了,確實有這個方法。之前有聽人說過 Ruby 的文檔做得如何如何的爛,Python 的文檔做得如何如何的好,我雖然沒覺得 Ruby 的文檔很爛,但是也覺得 Python 的文檔確實不錯,我最喜歡它末尾的 Examples 。兩個文檔系統(tǒng)倒是走的不同的路,Ruby 的文檔是從代碼中抽?。ㄌ囟ǜ袷降模┳⑨寔碜詣由傻模愃朴?javadoc ;而 Python 現(xiàn)在用的是獨立于源代碼的文檔系統(tǒng),人工寫的,不過到頭來居然連函數(shù)都漏掉了,可見人工維護文檔的弊端還是很明顯的。其實我見過的文檔系統(tǒng),最好用的應(yīng)該還是屬于 Emacs/Elisp 了吧。 不過,廢話少講,handler 如下:
class SimpleCookieHandler(urllib2.BaseHandler): def http_request(self, req): simple_cookie = 'cc98Simple=1' if not req.has_header('Cookie'): req.add_unredirected_header('Cookie', simple_cookie) else: cookie = req.get_header('Cookie') req.add_unredirected_header('Cookie', simple_cookie + '; ' + cookie) return req
然后,構(gòu)造 opener 的時候加上這個 handler 就可以了:
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(), SimpleCookieHandler())
但總歸是一個 workaround ,期待那個 patch 被加入到標準庫中吧。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- 詳談python http長連接客戶端
- 使用httplib模塊來制作Python下HTTP客戶端的方法
- 使用基于Python的Tornado框架的HTTP客戶端的教程
- 如何用python實現(xiàn)一個HTTP連接池
- Python Http請求json解析庫用法解析
- python3從網(wǎng)絡(luò)攝像機解析mjpeg http流的示例
- 基于Python模擬瀏覽器發(fā)送http請求
- Python requests HTTP驗證登錄實現(xiàn)流程
- Python實現(xiàn)http接口自動化測試的示例代碼
- 詳解用python -m http.server搭一個簡易的本地局域網(wǎng)
- python用700行代碼實現(xiàn)http客戶端
相關(guān)文章
Python?Setuptools的?setup.py實例詳解
setup.py是一個?python?文件,它的存在表明您要安裝的模塊/包可能已經(jīng)用?Setuptools?打包和分發(fā),這是分發(fā)?Python?模塊的標準。?它的目的是正確安裝軟件,本文給大家講解Python?Setuptools的?setup.py感興趣的朋友跟隨小編一起看看吧2022-12-12jupyter?notebook內(nèi)核啟動失敗問題及解決方法
這篇文章主要介紹了解決jupyter?notebook內(nèi)核啟動失敗問題,本文給大家介紹了問題原因分析及解決方案,圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下2022-04-04基于opencv的selenium滑動驗證碼的實現(xiàn)
這篇文章主要介紹了基于opencv的selenium滑動驗證碼的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07基于Python實現(xiàn)通過微信搜索功能查看誰把你刪除了
這篇文章主要介紹了基于Python實現(xiàn)微信搜索查看誰把你刪除了的相關(guān)資料,需要的朋友可以參考下2016-01-01