411 length required. Помогите!

Статус
В этой теме нельзя размещать новые ответы.

argh

Создатель
Регистрация
18 Мар 2008
Сообщения
46
Реакции
0
Пишу постер. Выдает ошибку 411 length required. Либо непрально формирую заголовок, либо непрально сессии курла одну за другой открываю. Помогите, а то башка едет уже.

Сначала логинюсь.

PHP:
$url="http://example11111.ru/post_entry.html"; 
$ua = 'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)';

$ch=curl_init(); 



 curl_setopt($ch, CURLOPT_URL, $url);    
 curl_setopt($ch, CURLOPT_HEADER, 1);  
 curl_setopt($ch, CURLOPT_USERAGENT, $ua);
 curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$answer=curl_exec($ch); 
	echo $answer;

//Далее выводим ответ в браузер чтобы глянуть что там у нас пришло в заголовках. Там видим что в заголовке нам выдают кукисы PHPSESSID. Выдираем их и //сохраняем себе на память  :
echo "<br>";
echo substr($answer, strpos($answer, "tsid=")+5, 32);

$sess_cookie=substr($answer, strpos($answer, "tsid=")+5, 32);

Потом формирую запрос на логин. В хедерах указываю только контент-ленгф, хотя пробовал указывать все, но от ошибки не избавился.

PHP:
   $post = "user=".$login."&passw=".$password."";

          
          curl_setopt($ch, CURLOPT_URL, $url);
          curl_setopt($ch, CURLOPT_POST, true);
          curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
          curl_setopt($ch, CURLOPT_COOKIE, $sess_cookie); 
          curl_setopt ($ch, CURLOPT_USERAGENT, $ua);
          curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Может надо закрывать и открывать curl или разные имена должны быть?
Приведите плз пример правильной передачи хттп-хедера, если не можете сказать по этому примеру. Заранее спасибо!
 
>> В хедерах указываю только контент-ленгф
А зачем вообще что-то указывать в хедерах? (в твоём случае).
Если без указания хедера попробовать..?
 
Без указания хедера как раз и пишет 411 ошибку.
 
Подожди, так у тебя и с указанием Content-Lenght и без него вылетает эта ошибка?

Да именно так. Странно конечно, но это наталкивает на мысль, что я неправильно передаю контент ленгф.
 
Я с курлом не дружу... =/
Попробуй второй запрос сокетами сделать:
PHP:
$host="example11111.ru";
$refer="http://example11111.ru/post_entry.html";
$zap="/post_entry.html";

$query="user=".$login."&passw=".$password."";
$post="POST $zap HTTP/1.1\r\n".
"Host: $host\r\n".
"Referer: $refer\r\n".
"Cookie: $sess_cookie\r\n".
"Accept-language: en\r\n".
"Content-type: application/x-www-form-urlencoded\r\n".
"User-Agent: Mozilla 4.0\r\n".
"Content-length: ".strlen($query)."\r\n".
"Connection: close\r\n\r\n$query";
$fp=fsockopen($host,80);
fwrite($fp,$post);
while($get=fread($fp,4096))
  echo $get;
 
  • Нравится
Реакции: argh
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );

вот эта строка лишняя,

ее нужно использовать в том случае, если вы самостоятельно генерите полностью весь HTTP заголовок для запроса...
 
  • Нравится
Реакции: argh
Ну незнаю каму как ват к примеру скриптец вернее клас для курлов.
ИМХО лень учить используй класы ! :D



Вот качнеш там все и так понятно там и get и post описан.

Если чего не понятно могу прям тут расписать че и как на примере авторизации к примеру на mail.ru

Да к стати он автоматом узерагента отправляет + автоматом куки сохраняет и шлет + по локатионам ползает.

 
  • Нравится
Реакции: argh
вот эта строка лишняя,

ее нужно использовать в том случае, если вы самостоятельно генерите полностью весь HTTP заголовок для запроса...

Убрал строку, все равно та же ошибка. Заголовки эти УГ :(

Добавлено через 30 минут
Я с курлом не дружу... =/
Попробуй второй запрос сокетами сделать:
PHP:
$host="example11111.ru";
$refer="http://example11111.ru/post_entry.html";
$zap="/post_entry.html";

$query="user=".$login."&passw=".$password."";
$post="POST $zap HTTP/1.1\r\n".
"Host: $host\r\n".
"Referer: $refer\r\n".
"Cookie: $sess_cookie\r\n".
"Accept-language: en\r\n".
"Content-type: application/x-www-form-urlencoded\r\n".
"User-Agent: Mozilla 4.0\r\n".
"Content-length: ".strlen($query)."\r\n".
"Connection: close\r\n\r\n$query";
$fp=fsockopen($host,80);
fwrite($fp,$post);
while($get=fread($fp,4096))
  echo $get;

Сделал как ты. Опять та же ошибка.

У меня возникает сомнение может логин проходит гладко а ошибка просто есть? Проверить я это не могу.

Результат выполнения такой:


Found
The document has moved here.

Additionally, a 302 Found error was encountered while trying to use an ErrorDocument to handle the request.

411 Length Required
nginx/0.7.19
 
Это значит, что документ "переехал". В заголовках или данных на этой же странице должен выводиться адрес, куда переехала страница.

возможно это ссылка под словом "here"
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху