我正在使用 python mechanize lib,我正在尝试在某些 url 上使用 http PUT 方法 - 但我找不到任何选项。我只看到 GET 和 POST 方法...
如果 PUT 方法不起作用,也许 some1 可以告诉我一个更好的库来执行此操作?
我正在使用 python mechanize lib,我正在尝试在某些 url 上使用 http PUT 方法 - 但我找不到任何选项。我只看到 GET 和 POST 方法...
如果 PUT 方法不起作用,也许 some1 可以告诉我一个更好的库来执行此操作?
一种可能的解决方案:
class PutRequest(mechanize.Request):
"Extend the mechanize Request class to allow a http PUT"
def get_method(self):
return "PUT"
然后,您可以在发出这样的请求时使用它:
browser.open(PutRequest(url,data=your_encoded_params,headers=your_headers))
注意:我通过深入研究 mechanize 代码包来找出 mechanize 设置 HTTP 方法的位置,从而得出了这个解决方案。我注意到,当我们调用时mechanize.Request
,我们正在使用 Request 类,_request.py
其中又扩展了 Request 类_urllib2_fork.py
。http 方法实际上是get_method
在 Request 类中设置的_urllib2_fork.py
。结果get_method
是_urllib2_fork.py
只允许 GET 和 POST 方法。为了克服这个限制,我最终编写了自己的 put 和 delete 类来扩展机械化。请求但仅超越get_method()
。
使用请求:
>>> import requests
>>> result = requests.put("http://httpbin.org/put", data='hello')
>>> result.text
根据文档:
requests.put(url, data=None, **kwargs)
Sends a PUT request. Returns Response object.
Parameters:
url – URL for the new Request object.
data – (optional) Dictionary or bytes to send in the body of the Request.
**kwargs – Optional arguments that request takes.
通过机械化:
import mechanize
import json
class PutRequest(mechanize.Request):
def get_method(self):
return 'PUT'
browser = mechanize.Browser()
browser.open(
PutRequest('http://example.com/',
data=json.dumps({'locale': 'en'}),
headers={'Content-Type': 'application/json'}))
另请参阅http://qxf2.com/blog/python-mechanize-the-missing-manual/(可能已过时)。
正如Key Zhu所说, Requests以更好的方式进行。