2010-10-07 52 views
3

使用urllib2,我們能夠使用'GET'或'POST'以外的方法(當提供數據時)嗎?python中的自定義方法urllib2

我挖掘了一下庫,看起來使用GET或POST的決定很方便地與請求中是否提供了數據相關聯。

例如,我想與需要諸如'DEL','PUT'等方法的CouchDB數據庫進行交互。我想要urllib2的處理程序,但需要自己調用方法。

我希望不要導入第三方模塊到我的項目中,例如CouchDB python api。所以,請不要走那條路。我的實現必須使用Python 2.6附帶的模塊。 (我的設計規範要求使用準系統PortablePython發行版)。在導入外部模塊之前,我會使用httplib編寫自己的界面。

感謝這麼多的幫助

回答

7

你可以繼承urllib2.Request像這樣(未經)

import urllib2 

class MyRequest(urllib2.Request): 
    GET = 'get' 
    POST = 'post' 
    PUT = 'put' 
    DELETE = 'delete' 

    def __init__(self, url, data=None, headers={}, 
       origin_req_host=None, unverifiable=False, method=None): 
     urllib2.Request.__init__(self, url, data, headers, origin_req_host, unverifiable) 
     self.method = method 

    def get_method(self): 
     if self.method: 
      return self.method 

     return urllib2.Request.get_method(self) 

opener = urllib2.build_opener(urllib2.HTTPHandler) 
req = MyRequest('http://yourwebsite.com/put/resource/', method=MyRequest.PUT) 

resp = opener.open(req) 
+0

這正是我一直在尋找這樣做。擴展urllib2模塊以覆蓋該方法。蟒蛇的美麗。 在請求...上調用init時發生的一個變化... urllib2.Request .__ init __(self,....) – sbartell 2010-10-08 07:21:17

+0

@sbartell:很高興它解決了問題......我更新了__init__以包含自己, get_method返回超類的默認值,而不是僅僅複製它的方法。 – sdolan 2010-10-08 18:00:50