向服务器提交发布字符串时,我不断收到<h1>Length required</h1>错误。

$cookie = "Secret cookie data here";

$searchData = array(
        '__EVENTTARGET' => 'ctl00$main$btn',
        'ctl00$main$tbMNr' => $_GET['smth'],
        'ctl00$main$tbMb' => $_GET['smthElse'],
        '__VIEWSTATE' => 'smthElseHere'
);

// Commenting this out, as suggested by user lonesomeday
//foreach ($searchData as &$elem) // This should not be necessary
//    $elem = urlencode($elem);


// create a new cURL resource

$fields = http_build_query($searchData); // Assuming it's an array

if ($ch = curl_init("http://mysite.com"))
{
        // set URL and other appropriate options
        curl_setopt($ch, CURLOPT_COOKIE, $cookie);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_POST, true); // Suggestion from Berry Langerak - no difference, same error
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
}



$result = curl_exec($ch);
if ($result === false) {
    echo 'Curl error: ' . curl_error($ch);
}
echo "<pre>".$fields."</pre>".$result; // For debugging ONLY

curl_close($ch);

如果我注释掉CURLOPT_POSTFIELDSCURLOPT_POST,一切都很好。

有什么建议么?

编辑

当我添加此行
curl_setopt($ch, CURLOPT_HEADER, array('Content-Type:application/x-www-form-urlencoded'));

我在Length Required之前看到此错误

最佳答案

您的用法完全混淆了。

  • 不要自己更改Content-Length,但让libcurl进行更改以使其正确。
  • 您是否打算进行多部分的formpost(将哈希数组传递给POSTFIELDS选项)或“常规” formpost(将字符串传递给POSTFIELDS选项)?接收者很可能会假设其中之一,而您不能随心所欲地随机选择一种类型。
  • 如果您具有正确的POST,并且知道您正确发送了数据(针对记录的浏览器使用情况进行验证),那么您可以看到服务器所说的内容,如果它仍然坚持认为有问题,那么您可以回顾记录的 session 并进行调整您的要求与此类似。冲洗并重复直到起作用。
  • 关于php - 使用cURL发布数据时,“需要长度”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6015501/

    10-08 22:57