国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python HTTP客戶端自定義Cookie實現實例

2020-02-23 04:38:27
字體:
來源:轉載
供稿:網友

Python HTTP客戶端自定義Cookie實現實例

幾乎所有腳本語言都提供了方便的 HTTP 客戶端處理的功能,Python 也不例外,使用 urllib 和 urllib2 可以很方便地進行 HTTP GET 和 POST 等各種操作。并且還允許以類似于插件的形式加入一些 handler ,來定制 request 和 response ,比如代理的支持和 cookie 的支持都是這樣添加進來的。具體來說,通過如下方式構造一個 opener :

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())

然后這個 opener 就可以處理 cookie 了,相當方便,并且可定制性也……好吧,總之,現在我希望能在客戶端手動插入一些 cookie 值,但是不管是 HTTPCookieProcessor 還是 cookielib 里的 CookieJar 都沒有提供類似的方法可以來實現。

看起來,也并不是我一個人有這樣的需求,因為我在查找解決方案的時候,還找到了有人給 Python 提交的這個 Patch,就是添加這個功能。不過看起來好像還沒有被 accept 的樣子,這樣對標準庫做暴力 patch 的方式可移植性似乎也不好。所以我還是另外找了解決方案,其實也很簡單:看了 HTTPCookieProcessor 的實現代碼之后,發現我可以做類似的事情,也就是在寫一個 handler ,把我想要的 cookie 值強制放到 request 對象的 header 中去。

于是我查了 Python 的文檔,對于 handler 的接口好像幾乎沒有描述,于是我就照著 HTTPCookieProcessor 來寫了。這個 handler 應該放在正常的 cookie 處理 handler 的后面,然后檢查已經存在的 cookie header ,再進行合并一下。不過比較詭異的是在 Python 的文檔里并沒有找到 Request 對象有 get_header 之類的方法可以得到已經存在的 header 項的值,覺得很詭異,于是直接查了源代碼,才找到了,確實有這個方法。之前有聽人說過 Ruby 的文檔做得如何如何的爛,Python 的文檔做得如何如何的好,我雖然沒覺得 Ruby 的文檔很爛,但是也覺得 Python 的文檔確實不錯,我最喜歡它末尾的 Examples 。兩個文檔系統倒是走的不同的路,Ruby 的文檔是從代碼中抽?。ㄌ囟ǜ袷降模┳⑨寔碜詣由傻?,類似于 javadoc ;而 Python 現在用的是獨立于源代碼的文檔系統,人工寫的,不過到頭來居然連函數都漏掉了,可見人工維護文檔的弊端還是很明顯的。其實我見過的文檔系統,最好用的應該還是屬于 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

然后,構造 opener 的時候加上這個 handler 就可以了:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潜江市| 阿尔山市| 巴青县| 康定县| 乌拉特中旗| 莒南县| 沙河市| 大竹县| 中宁县| 安远县| 吴川市| 台北县| 商都县| 朝阳县| 平舆县| 安阳县| 衡水市| 长乐市| 阜新市| 宁强县| 蕲春县| 唐海县| 台江县| 克山县| 年辖:市辖区| 布尔津县| 秭归县| 楚雄市| 托克托县| 临邑县| 永州市| 来宾市| 横峰县| 项城市| 肇源县| 耿马| 贡觉县| 甘谷县| 沐川县| 铜川市| 洛浦县|