0

我正在使用 python mechanize lib,我正在尝试在某些 url 上使用 http PUT 方法 - 但我找不到任何选项。我只看到 GET 和 POST 方法...

如果 PUT 方法不起作用,也许 some1 可以告诉我一个更好的库来执行此操作?

4

3 回答 3

1

一种可能的解决方案:

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()

于 2014-05-01T08:41:59.417 回答
0

使用请求

>>> 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.
于 2012-12-10T22:42:40.630 回答
0

通过机械化

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以更好的方式进行。

于 2016-01-08T14:25:12.157 回答