10

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

andをコメントアウトするCURLOPT_POSTFIELDSCURLOPT_POST、すべて問題ありません。

助言がありますか?

編集

この行を追加すると

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

直前にこのエラーが表示されます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

4

5 に答える 5

6

あなたの使い方は完全に混乱しています。

  1. Content-Length を自分で変更しないでください。正しくなるように libcurl に変更させてください。

  2. マルチパートフォームポスト (ハッシュ配列を POSTFIELDS オプションに渡す) または「通常の」フォームポスト (文字列を POSTFIELDS オプションに渡す) を行うつもりですか? 受信者はほとんどの場合、それらのいずれかを想定し、自分の意志でランダムにタイプを選択することはできません.

  3. 正しい POST があり、データを正しく送信したことがわかっている場合 (記録されたブラウザーの使用に対して検証)、サーバーが何言っているのかを確認できます。それでも何か問題があると主張する場合は、記録されたセッションを振り返って、それにもっと似ているように要求します。うまくいくまですすぎ、繰り返します。

于 2011-05-16T12:15:14.493 に答える
4

同じ症状でここに来た人々のために追加したかっただけです:

IIS 6にPOSTしていて、コンテンツがない場合でも、Content-Length:0を送信する必要があります。そうしないと、「LengthRequired」というメッセージが表示されます。

于 2011-07-28T18:49:53.970 に答える
3

うーん、あなたの意図がPOSTリクエストを行うことだとcURLに言っているのを見ません。次のオプションを追加します。

curl_setopt($ch, CURLOPT_POST, true);

これで問題が解決する場合があります。

于 2011-05-16T09:42:18.243 に答える
1

編集: & も削除しようとしましたか??

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

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

コメントアウトしようとしたか

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

また、あなたの Cookie データは有効ですか?

にエージェントを入れてみてください:

$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);
  • リファラーをセットアップします。

    curl_setopt($ch, CURLOPT_REFERER,$url);

于 2011-05-16T10:29:13.640 に答える
0
$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);
于 2013-11-08T10:01:13.730 に答える