【发布时间】:2017-08-01 06:30:02
【问题描述】:
我一直使用这个函数来处理http请求没有问题:
def do_request(self, method, url, **kwargs):
params = kwargs.get('params', None)
headers = kwargs.get('headers', None)
payload = kwargs.get('data', None)
request_method = {'GET':requests.get, 'POST': requests.post, 'PUT': requests.put, 'DELETE': requests.delete}
request_url = url
req = request_method[method]
try:
res = req(request_url, headers=headers, params=params, data=json.dumps(payload))
except (requests.exceptions.ConnectionError, requests.exceptions.RequestException) as e:
data = {'has_error':True, 'error_message':e.message}
return data
try:
data = res.json()
data.update({'has_error':False, 'error_message':''})
except ValueError as e:
msg = "Cannot read response, %s" %(e.message)
data = {'has_error':True, 'error_message':msg}
if not res.ok:
msg = "Response not ok"
data.update({'has_error':True, 'error_message':msg})
if res.status_code >= 400:
msg = 'Error code: ' + str(res.status_code) + '\n' + data['errorCode']
data.update({'has_error':True, 'error_message': msg})
return data
当我必须在没有正文实体的情况下执行 DELETE 请求时,我没有问题,但是当我尝试添加一个(当服务器要求时)时,我从服务器收到一条错误消息,告诉正文不能为空,好像没有尸体已寄出。任何想法为什么会发生这种情况?我正在使用请求模块和 python 2.7.12。据我所知,数据可以在 DELETE 请求中发送。谢谢!
【问题讨论】:
-
你的“身体实体”是什么意思?
-
换句话说,我的意思是实体或数据,对此感到抱歉
-
DELETE 包含实体正文时,部分客户端和部分服务器出现问题:stackoverflow.com/questions/299628/…,例如 & 大量搜索结果。一些服务器(显然)将 DELETE 转换为 POST,其他服务器只是执行 DELETE 但删除正文。在您的情况下,调查您的服务器是否允许使用正文删除?
-
谢谢 pbuck,你是对的!显然,正如您所说,我调查了服务器,他们在 DELETE 请求的主体方面存在问题,主体正在被服务器丢弃,因此他们建议通过将 DELETE 更改为 POST 来解决问题!!!!!!谢谢!
-
好消息...我已经为这个问题创建了一个“答案”,因此将来的用户无需搜索 cmets。
标签: python python-requests http-delete