HTTP删除与python请求模块
我想使用python请求模块执行HTTP DELETE,该模块遵循下面的API 我正在使用PythonV2.7和请求模块。我的python代码如下所示HTTP删除与python请求模块,python,http,python-requests,http-delete,Python,Http,Python Requests,Http Delete,我想使用python请求模块执行HTTP DELETE,该模块遵循下面的API 我正在使用PythonV2.7和请求模块。我的python代码如下所示 def clear(channel_id): data = {} data['api_key'] = 'DUCYS8xufsV613VX' URL_delete = "http://api.thingspeak.com/channels/" + str(channel_id) + "/feeds" r
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))
您必须使用命名输入“data”,我猜您实际上希望转储JSON,因此您必须将字典“mydata”转换为JSON字符串。您可以使用json.dumps()实现这一点
我不知道您正在使用的API,但听上去您实际上希望传递URL参数,而不是数据,因为您需要:
r = requests.delete(URL_delete, params=mydata)
无需将
mydata
dict转换为json字符串 您可以按照@Eugene的建议发送数据参数,但传统的删除请求只包含url而不包含其他内容。原因是RESTful url应该唯一地标识资源,从而消除了为删除提供额外参数的需要。另一方面,如果您的“APIKEY”与身份验证有关,那么它应该是头的一部分,而不是请求数据,类似这样
headers = {'APIKEY': 'xxx'}
response = requests.delete(url, data=json.dumps(payload), headers=headers)
谢谢经测试,答案是正确的。第二种方法有效。有一件事我不明白。为什么
r=requests.delete(URL\u delete,mydata)
失败,但r=requests.delete(URL\u delete,params=mydata)
有效?对于HTTP Post,我不需要使用参数。为什么不同?如果你看看。您可以看到post
被定义为post(url,data=None…
),而delete被定义为delete(url,**kwargs)
。kwargs意味着它必须是一个“关键参数”。post有效,因为它显式列出了一些参数。
headers = {'APIKEY': 'xxx'}
response = requests.delete(url, data=json.dumps(payload), headers=headers)