IIS PHP 5.5 - HTTP 错误 411。请求必须分块或具有内容长度
IIS PHP 5.5 - HTTP Error 411. The request must be chunked or have a content length
我在 IIS 7 中使用 PHP。
早些时候我有 PHP 5.3 它工作正常。
现在我迁移到 PHP 5.5 并且我在 curl 请求上收到 "HTTP Error 411. The request must be chunked or have a content length." 错误。
我正在谷歌搜索解决方案,但无法获得任何提示。
下面是我使用的示例代码:
$request = "https://example.com?searchTxt=" . $keyword . "&count=" . $count;
$data = "[1]";
$data_encoded = utf8_encode($data);
// Initialize the session
$session = curl_init($request);
// Set curl options
curl_setopt($session, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($data_encoded)));
curl_setopt($session, CURLOPT_POST, 1);
curl_setopt($session, CURLOPT_POSTFIELDS, $data_encoded);
curl_setopt($session, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($session, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($session, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($session, CURLOPT_AUTOREFERER, 1);
curl_setopt($session, CURLOPT_FAILONERROR, FALSE);
curl_setopt($session, CURLOPT_USERPWD, USERNAME . ':' . PASSWORD);
curl_setopt($session, CURLOPT_VERBOSE, TRUE); // Display communication with server
curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_NTLM ) ;
curl_setopt($session, CURLOPT_CAINFO, CERTIFICATE_PATH);
curl_setopt($session, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
// Make the request
$response = curl_exec($session);
您不需要在请求中明确添加内容长度 header。 cURL 将添加(计算)长度并在需要时添加。
由于 strlen()
不是 multi-byte 友好的,strlen(utf8_encode($data_encoded))
没有像您预期的那样工作。对于 UTF-8 字符,您应该使用 mb_strlen()
代替。参见 documentation
此外,如果您的 $data_encoded
未使用 ISO-8859-1 编码,则该功能也无法如您所愿;该函数实际上是一个 ISO-8859-1 到 UTF-8 的转换器。参见 documentation
最后,根据您的代码,$data_encoded
不知从何而来。
我在 IIS 7 中使用 PHP。 早些时候我有 PHP 5.3 它工作正常。 现在我迁移到 PHP 5.5 并且我在 curl 请求上收到 "HTTP Error 411. The request must be chunked or have a content length." 错误。
我正在谷歌搜索解决方案,但无法获得任何提示。
下面是我使用的示例代码:
$request = "https://example.com?searchTxt=" . $keyword . "&count=" . $count;
$data = "[1]";
$data_encoded = utf8_encode($data);
// Initialize the session
$session = curl_init($request);
// Set curl options
curl_setopt($session, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($data_encoded)));
curl_setopt($session, CURLOPT_POST, 1);
curl_setopt($session, CURLOPT_POSTFIELDS, $data_encoded);
curl_setopt($session, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($session, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($session, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($session, CURLOPT_AUTOREFERER, 1);
curl_setopt($session, CURLOPT_FAILONERROR, FALSE);
curl_setopt($session, CURLOPT_USERPWD, USERNAME . ':' . PASSWORD);
curl_setopt($session, CURLOPT_VERBOSE, TRUE); // Display communication with server
curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_NTLM ) ;
curl_setopt($session, CURLOPT_CAINFO, CERTIFICATE_PATH);
curl_setopt($session, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
// Make the request
$response = curl_exec($session);
您不需要在请求中明确添加内容长度 header。 cURL 将添加(计算)长度并在需要时添加。
由于 strlen()
不是 multi-byte 友好的,strlen(utf8_encode($data_encoded))
没有像您预期的那样工作。对于 UTF-8 字符,您应该使用 mb_strlen()
代替。参见 documentation
此外,如果您的 $data_encoded
未使用 ISO-8859-1 编码,则该功能也无法如您所愿;该函数实际上是一个 ISO-8859-1 到 UTF-8 的转换器。参见 documentation
最后,根据您的代码,$data_encoded
不知从何而来。