当前位置:  开发笔记 > 编程语言 > 正文

有没有办法在python中进行HTTP PUT

如何解决《有没有办法在python中进行HTTPPUT》经验,为你挑选了8个好方法。

我需要PUT在python中使用HTTP将一些数据上传到服务器.从我对urllib2文档的简要介绍来看,它只能用于HTTP POST.有没有办法PUT在python中做HTTP ?



1> John Carter..:

我过去曾经使用过各种python HTTP库,我已经把' 请求 '作为我的最爱.现有的libs具有相当可用的接口,但是对于简单的操作,代码最终可能只有几行.请求中的基本PUT如下所示:

payload = {'username': 'bob', 'email': 'bob@bob.com'}
>>> r = requests.put("http://somedomain.org/endpoint", data=payload)

然后,您可以检查响应状态代码:

r.status_code

或响应:

r.content

请求有很多synactic糖和快捷方式,这将使你的生活更轻松.


即使上面的代码看起来非常简单,也不要推断"请求"在任何方面都缺乏或不足.它非常强大,只需要一个非常整洁的界面.
我想知道这个答案要多久才能逐渐积累选票,直到它成为新的最高票数答案?
如果您希望数据在正文中,请使用`json = payload`参数。
你不明白这是多么棒!我正在与一个糟糕的java库挣扎!......我觉得我爱你指的是"请求"!

2> Florian Bösc..:
import urllib2
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request('http://example.org', data='your_put_data')
request.add_header('Content-Type', 'your/contenttype')
request.get_method = lambda: 'PUT'
url = opener.open(request)


写这篇文章的答案很精彩,但现在使用"请求"软件包要容易得多,请参阅John Carter的答案."请求"绝不是玩具 - 它非常强大.
谢谢,我不想使用标准python库之外的任何东西,这是完美的.我不太明白为什么urllib2的设计只是为了满足GET和POST标准,但这项工作是冠军.urllib2.build_opener(urllib2.HTTPHandler)可以在多个调用中重用吗?
如果你要将urllib2.Request子类化而不是猴子修补它,那就不那么糟糕了.
这个答案是规范的,但已经过时了.请考虑使用`requests`库.
看起来像一个肮脏的黑客,但它似乎优雅和完整的工作
如果你不需要使用开启器,你可以使用`urllib2.urlopen`而不是`opener.open`.
对于任何不想使用单独库的人,如果您想取回尸体,则最后一行应如下所示:response = opener.open(request)return response.read()

3> Spooles..:

Httplib似乎是一个更清洁的选择.

import httplib
connection =  httplib.HTTPConnection('1.2.3.4:1234')
body_content = 'BODY CONTENT GOES HERE'
connection.request('PUT', '/url/path/to/put/to', body_content)
result = connection.getresponse()
# Now result.status and result.reason contains interesting stuff



4> John Montgom..:

你应该看一下httplib模块.它应该让你做出你想要的任何类型的HTTP请求.



5> Mike..:

我需要在一段时间内解决这个问题,以便我可以充当RESTful API的客户端.我决定使用httplib2,因为它允许我除了GET和POST之外还发送PUT和DELETE.Httplib2不是标准库的一部分,但您可以从奶酪店轻松获得它.


httplib2是边缘放弃软件.尽管有社区贡献(补丁),但它有很多不完整的错误.我建议在任何生产环境中使用httplib2之前要三思而后行.

6> radtek..:

您可以使用请求库,与采用urllib2方法相比,它简化了很多事情.首先从pip安装它:

pip install requests

更多关于安装请求.

然后设置put请求:

import requests
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}

# Create your header as required
headers = {"content-type": "application/json", "Authorization": "" }

r = requests.put(url, data=json.dumps(payload), headers=headers)

请参阅请求库的快速入门.我认为这比urllib2简单得多,但是需要安装和导入这个额外的包.



7> Anthony Sott..:

这在python3中做得更好,并在stdlib文档中记录

urllib.request.Request班获得了method=...在python3参数.

一些示例用法:

req = urllib.request.Request('https://example.com/', data=b'DATA!', method='PUT')
urllib.request.urlopen(req)



8> Corey Goldbe..:

我还推荐Joe Gregario的httplib2.我在标准库中定期使用它而不是httplib.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有