2015-08-28 45 views
5

我想用跟随下面的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()只能接受一个参数。正确的代码应该如何?

回答

4

你想

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字符串。

+0

谢谢!经过测试是正确的答案。第二种方法起作用。有一件事我不明白。为什么'r = requests.delete(URL_delete,mydata)'失败,但是'r = requests.delete(URL_delete,params = mydata)'有效?对于HTTP Post,我不需要使用参数。为什么区别? – user781486

+3

如果你看看https://github.com/kennethreitz/requests/blob/master/requests/api.py。你可以看到'post'被定义为'post(url,data = None ...)',而delete被定义为'delete(url,** kwargs)'。 kwargs意味着它必须是一个“键控论证”。发布作品会使其显式列出一些参数。 –

2

您可以将@Eugene建议的数据参数发送出去,但传统上删除请求只包含url而没有其他内容。原因是RESTful url应该唯一地标识资源,从而消除了为删除提供附加参数的需要。另一方面,如果你的'APIKEY'与认证有关,那么它应该是头部的一部分而不是请求数据,就像这样。

headers = {'APIKEY': 'xxx'} 
response = requests.delete(url, data=json.dumps(payload), headers=headers)