'Length required', when posting data with cURL

风流意气都作罢 提交于 2019-12-19 16:02:42

问题


I keep getting a <h1>Length required</h1> error, when submitting a post string to a server.

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

If I comment out the CURLOPT_POSTFIELDS and CURLOPT_POST, everything is fine.

Any suggestions?

Edit

When I add this line

curl_setopt($ch, CURLOPT_HEADER, array('Content-Type:application/x-www-form-urlencoded'));

I see this error, right before Length Required

HTTP/1.1 411 Length Required Content-Type: text/html Date: Mon, 16 May 2011 10:20:54 GMT Connection: close Content-Length: 24


回答1:


Your usage is completely mixed up and confused.

  1. Don't change Content-Length yourself but let libcurl do it so that it gets correct.

  2. Are you intending to do a multipart formpost (pass a hash array to the POSTFIELDS option) or a "regular" one (pass a string to the POSTFIELDS option) ? The receiver will mostly likely assume one of them and you can't just randomly select a type at your own will.

  3. When you have the correct POST and you know you send the data correctly (verify against a recorded brower use), then you can see what the server says and if it still insists something is wrong then you look back on the recorded session and adjust your request to be more similar to that. Rinse and repeat until it works.




回答2:


Just wanted to add for the sake of people who came here with the same symptoms:

If you are POSTing to IIS 6 and do not have any Content, you still need to send Content-Length: 0 or it will complain "Length Required".




回答3:


Ehrm, I don't see you telling cURL that your intent is to do a POST request. Add the following option:

curl_setopt($ch, CURLOPT_POST, true);

That might fix the issue.




回答4:


EDIT : Did you also try to remove the & amp; ?

http_build_query($array, '', '&');

=============

Did you try to comment out

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));

And is your cookie data valid?

Try to put an agent in :

$agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)";
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
  • Set up a referrer :

    curl_setopt($ch, CURLOPT_REFERER,$url);




回答5:


$query ="email=".urlencode($usernames[$key]."@sktechno.net")."&firstName=".urlencode($usernames[$key])."&lastName=".urlencode($lastnames[$key]);

$headerX = array(
'ISV_API_KEY: f6c1c52d03f49c9b4f94150256f2f0dcec6ada1d175d06e990e2d692f443a2db',
'ISV_API_SECRET: 8ae599feda50db968cf4b536e7d79e4ad2d6bd60f41715336b73002819795cc0'
);


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerX);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);


来源:https://stackoverflow.com/questions/6015501/length-required-when-posting-data-with-curl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!