使用python请求模块进行HTTP删除
问题描述:
我想用跟随下面的API的python requests模块做一个HTTP DELETE;使用python请求模块进行HTTP删除
https://thingspeak.com/docs/channels#create
DELETE https://api.thingspeak.com/channels/4/feeds
api_key=XXXXXXXXXXXXXXXX
我使用python V2.7并请求模块。我的Python代码看起来像这样;
def clear(channel_id):
data = {}
data['api_key'] = 'DUCYS8xufsV613VX'
URL_delete = "http://api.thingspeak.com/channels/" + str(channel_id) + "/feeds"
r = requests.delete(URL_delete, data)
该代码不起作用,因为requests.delete()只能接受一个参数。正确的代码应该如何?
答
你想
import json
mydata = {}
mydata['api_key'] = "Jsa9i23jka"
r = requests.delete(URL_delete, data=json.dumps(mydata))
你必须使用指定的输入,“数据”,我猜你真正想要的JSON甩了,所以你必须转换你的字典里,“MYDATA”到json字符串。你可以使用json.dumps()。
我不知道你正在使用的API,而是由它的声音你真的想通过URL参数,而不是数据,您需要:
r = requests.delete(URL_delete, params=mydata)
无需转换mydata
字典到json字符串。
答
您可以将@Eugene建议的数据参数发送出去,但传统上删除请求只包含url而没有其他内容。原因是RESTful url应该唯一地标识资源,从而消除了为删除提供附加参数的需要。另一方面,如果你的'APIKEY'与认证有关,那么它应该是头部的一部分而不是请求数据,就像这样。
headers = {'APIKEY': 'xxx'}
response = requests.delete(url, data=json.dumps(payload), headers=headers)
谢谢!经过测试是正确的答案。第二种方法起作用。有一件事我不明白。为什么'r = requests.delete(URL_delete,mydata)'失败,但是'r = requests.delete(URL_delete,params = mydata)'有效?对于HTTP Post,我不需要使用参数。为什么区别? – user781486
如果你看看https://github.com/kennethreitz/requests/blob/master/requests/api.py。你可以看到'post'被定义为'post(url,data = None ...)',而delete被定义为'delete(url,** kwargs)'。 kwargs意味着它必须是一个“键控论证”。发布作品会使其显式列出一些参数。 –