【问题标题】:PHP CURL: HTTP/1.1 411 Length RequiredPHP CURL:需要 HTTP/1.1 411 长度
【发布时间】:2016-01-28 16:28:32
【问题描述】:

即使我指定了内容长度,我仍然收到错误:

需要长度


HTTP 错误 411。请求必须分块或具有内容长度。

这是我的代码

$curl = curl_init();
$data = array("Key" => "Value", "Key2" => "Value2");
$data = json_encode($data);
$length = strlen($data);

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($curl, CURLOPT_USERPWD, "username:password");
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8", "Content-Length: $length"));
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_HEADER, true);

$result = curl_exec($curl);

有什么想法吗?

【问题讨论】:

    标签: php curl content-length


    【解决方案1】:

    您确定需要使用 NTLM 身份验证选项吗?

    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);

    我对此进行了测试,它会导致请求中省略 content-type 标头以及 JSON 有效负载。

    尝试删除该行并查看请求是否有效。

    【讨论】:

    • 不幸的是,是的。该应用程序受 Windows 身份验证保护。
    • 在我的测试中,CURLAUTH_NTLM 选项与CURLOPT_CUSTOMREQUEST 和 content-length 标头一起导致既不会发送 content-length 也不会发送 POST 数据。我当然没有使用期望 NTLM 的服务器进行测试,所以这可能导致了问题。由于 NTLM 是基于协商的,您可能需要使用 curl 向身份验证发出一个请求,然后向 API 发出一个后续 PUT 请求。他们的公开文档是您正在使用的 API 的吗?
    • 遗憾的是没有公共 API,但是发出了两个请求,第一个只是为了验证,完成了这项工作!
    【解决方案2】:

    您将 Content-length 设置为 $data 的长度,但您发布的是 $update_json 而不是 $data

    【讨论】:

    • 复制/粘贴错误。对不起。那无法解决问题
    【解决方案3】:

    我遇到了类似的问题,并且为此花了几个小时绞尽脑汁。 只需从标题中删除内容长度:

    喜欢这个

    curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json;charset=utf-8"))
    

    【讨论】:

    • 我使用 php-curl-class 使用 NLTM 身份验证,它省略了我的标题“Content-Length”。我花了一整天的时间试图弄清楚。它对 POST 没有任何问题,但对于 PUT 请求,我必须像它所说的那样设置标题“内容类型”才能使其工作。不知道为什么它适用于 POST 而不是 PUT 请求。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多