«Требуется длина», при отправке данных с помощью cURL

Я продолжаю получать <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_POSTFIELDS и CURLOPT_POST , все в порядке.

Какие-либо предложения?

редактировать

Когда я добавляю эту строку

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

Я вижу эту ошибку, прямо перед Length Required

HTTP / 1.1 411 Требуемая длина Content-Type: text / html Дата: Пн, 16 мая 2011 10:20:54 GMT Подключение: закрыть Content-Length: 24

Related of "«Требуется длина», при отправке данных с помощью cURL"

Ваше использование полностью перепутано и запутано.

  1. Не изменяйте Content-Length самостоятельно, но пусть libcurl сделает это, чтобы он стал правильным.

  2. Вы намереваетесь сделать multipart formpost (передать хэш-массив в параметр POSTFIELDS) или «обычный» (передать строку в параметр POSTFIELDS)? Приемник, скорее всего, возьмет на себя одну из них, и вы не можете просто случайно выбрать тип по своему усмотрению.

  3. Когда у вас есть правильный POST, и вы знаете, что правильно отправляете данные (проверяйте на использование записанного браузера), вы можете увидеть, что говорит сервер, и если он все еще настаивает, что что-то не так, тогда вы оглядываетесь на записанный сеанс и настраиваете попросите более схожести с этим. Промыть и повторить до тех пор, пока он не будет работать.

Эмм, я не вижу, чтобы вы говорили cURL, что вы намерены сделать запрос POST. Добавьте следующий параметр:

 curl_setopt($ch, CURLOPT_POST, true); 

Это может решить проблему.

Просто хотел добавить ради людей, которые пришли сюда с такими же симптомами:

Если вы отправляете POST на IIS 6 и у вас нет содержимого, вам все равно нужно отправить Content-Length: 0 или он будет жаловаться на «Length Required».

EDIT : Вы также попытались удалить & amp; ?

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

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