IIS PHP 5.5 - HTTP错误411.请求必须分块或具有内容长度

时间:2015-10-13 10:10:07

标签: php curl iis-7

我在IIS 7中使用PHP。 早些时候我使用PHP 5.3它工作正常。 现在我迁移到PHP 5.5并且我得到了#34; HTTP错误411.请求必须被分块或具有内容长度。" curl请求出错。

我在谷歌搜索解决方案,但无法获得任何提示。

以下是我正在使用的示例代码:

    $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);

1 个答案:

答案 0 :(得分:1)

您无需在请求标头中明确添加内容长度。 cURL将添加(计算)长度并在需要时添加它。

由于strlen()不是多字节友好的,strlen(utf8_encode($data_encoded))无法按预期工作。对于UTF-8字符,您应该使用mb_strlen()代替。见documentation

此外,如果您的$data_encoded未在ISO-8859-1中编码,则该功能也无法正常工作;该功能实际上是ISO-8859-1到UTF-8转换器。见documentation

最后,根据您的代码,$data_encoded来自任何地方。