DELETE请求体中发送数据411 Length Required

文章讲述了在发送DELETE请求时遇到411LengthRequired错误的原因,即服务器期望有Content-Length头但未接收到。提供了解决方案,即如何将数据从请求体移到查询字符串中以符合HTTP标准。
摘要由CSDN通过智能技术生成
这个错误 "411 Length Required" 通常意味着你在发送一个 HTTP 请求时,服务器期望在请求体(body)中看到一个 `Content-Length` 头,但是你没有提供。在尝试使用 DELETE 方法发送一个请求,并且附带了一些数据(`data={"site_id": site_id}`)。

对于 DELETE 请求,通常我们不在请求体中发送数据,而是在 URL 的查询字符串中发送。然而,你的代码尝试在 DELETE 请求的请求体中发送数据,这可能导致服务器期望一个 `Content-Length` 头,但却没有收到。

一种可能的解决方案是将数据从请求体移动到查询字符串中。这可以通过修改 URL 来实现。下面是修改后的代码:
def get_response(url, method="get", **kwargs):
    s = requests.session()
    kwargs["verify"] = False
    headers = {"User-Agent": "System"}
    if not url.startswith("http"):
        url = "%s%s" % (HOST_SERVER, url) if url.startswith("/") else "%s/%s" % (HOST_SERVER, url)

    # 如果method是"delete",并且kwargs中有"data",将data移到url的查询字符串中
    if method == "delete" and "data" in kwargs:
        query_params = urllib.parse.urlencode(kwargs["data"])
        if "?" not in url:
            url += "?"
        url += query_params
        del kwargs["data"]  # 删除kwargs中的"data"

    try:
        resp = s.request(method, url, **kwargs)
    except:
        log.error("get_response {method} {url} {kwargs}".format(method=method, url=url, kwargs=kwargs))
        raise
    return resp

response = get_response(api_url, "delete", data={"site_id": site_id})
这个修改的代码将检查是否正在尝试发送一个 DELETE 请求,并且请求体中有数据。如果是这种情况,它会将数据移动到 URL 的查询字符串中,并删除请求体中的数据。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值