【问题标题】:DELETE Request in Python "requests" module not working with bodyPython“请求”模块中的删除请求不适用于正文
【发布时间】: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


【解决方案1】:

当 DELETE 包含实体主体时,某些客户端和某些服务器会出现问题:例如 Is an entity body allowed for an HTTP DELETE request? 和大量搜索结果。

一些服务器(显然)将 DELETE 转换为 POST,其他服务器只是执行 DELETE 但删除正文。在您的情况下,您已经调查过,服务器确实删除了 DELETE 的主体,并且建议您将 DELETE 更改为 POST。

【讨论】:

    【解决方案2】:

    嗯...我可以使用 Postman 发送带有正文的 DELETE,并且工作正常。但我无法使用 Requests 2.17.3 获得相同的结果

    这是一个与请求相关的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 2016-02-03
      • 2022-01-24
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多