Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Content-Length
 
 автор: Fox684   (28.02.2006 в 21:22)   письмо автору
 
 

Здравствуйте.
Помогите пожалуйста разобраться с Content-Length.
Необходимо соединиться с сервером, функция fsockopen, отправить заголовок, функция fputs (заголовок не менее 180 и не больше 350 байт), после необходимо прочитать файл, функция fgets.
Все сделал все работает, но есть загвоздка.
Если указываем Content-Length больше 174, не удается прочитать файл.
При этом сообщений о явных ошибках нет, страница зависает и через некоторое время выдает Fatal error: Maximum execution time of 30 seconds exceeded in z:\home\test2.ru\www\send\beeline\index.php

После нескольких экспериментов выяснилось что если мы после отправки страницу не читаем (убираем fgets) страница правильно понимает заголовок и гораздо большим количеством байт, но страницу необходимо прочитать.
Читать страницу пытался несколькими функциями, результат одинаков при использовании любой из проверенных функций.

Подскажите пожалуйста как можно исправить эту ошибку.

Еще, данные посылаются методом пост ( Content-Type: application/x-www-form-urlencoded )

Заголовок выглядит примерно так:
$head = "";

$head.="POST $path HTTP/1.1\r\n";
$head.="Host: $host\r\n";
$head.="Referer: $ref\r\n";
$head.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.0\r\n";
$head.="Content-Type: application/x-www-form-urlencoded\r\n";
$head.="Content-Length: 174\r\n";
$head.="\r\n";
$head.="…&";
$head.="…&";
$head.="…&";
$head.="…&";
$head.="…&";
$head.="…&";
$head.="… &";
$head.="… &";
$head.="… &";
$head.=" …&";
$head.="…";
fputs($fp,$head);

“…” – естественно заменяется параметрами, размером 180<…<350 байт.

   
 
 автор: cheops   (28.02.2006 в 23:56)   письмо автору
 
   для: Fox684   (28.02.2006 в 21:22)
 

Хм... погодите, а вы по какому критерию Content-Length выстанавливаете? Он должен передавать число байт в теле запроса...

   
 
 автор: Trianon   (01.03.2006 в 19:37)   письмо автору
 
   для: Fox684   (28.02.2006 в 21:22)
 

а должен примерно так. Заметьте, версию протокола я намеренно понизил до единицы.
$body ="…&";
$body.="…&";
$body.="…&";
$body.="…&";
$body.="…&";
$body.="…&";
$body.="… &";
$body.="… &";
$body.="… &";
$body.=" …&";
$body.="…";

$length = strlen($body);

$head ="POST $path HTTP/1.0\r\n";
$head.="Host: $host\r\n";
$head.="Referer: $ref\r\n";
$head.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.0\r\n";
$head.="Content-Type: application/x-www-form-urlencoded\r\n";
$head.="Content-Length: $length\r\n";
$head.="\r\n";

fputs($fp,$head.$body);

   
 
 автор: Fox684   (02.03.2006 в 01:36)   письмо автору
 
   для: Trianon   (01.03.2006 в 19:37)
 

Спасибо огромное.
У меня был немного другой принцип подсчета. :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования