Передача данных с помощью fsockopen?

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

new_forward

Профессор
Регистрация
5 Май 2008
Сообщения
673
Реакции
44
Доброго времени суток!

Передаю данные вот так:

Код:
$data="name=$name&familiya=$familiya&username=$username&email=$email&password=$password";
$fp = fsockopen("www.mysite.ru", 80, $errno, $errstr, 10);
$out = "POST /exemple.php HTTP/1.1\n";
$out .= "Host: www.mysite.ru\n";
$out .= "Referer: www.mysite.ru/\n";
$out .= "User-Agent: Opera\n";
$out .= "Content-Type: application/x-www-form-urlencoded\n";
$out .= "Content-Length: ".strlen($data)."\n\n";
$out .= $data."\n\n";
fputs($fp, $out);
fclose($fp);

Такой вариант работает только иногда проскакивает не поюму почему?
Другими словами иногда данные не доходят...:nezn:
 
Ошибок скрипт не выдает ?
Возможно просто отправляемые данные теряются на просторах интернета
Включи вывод всех ошибок и время выполнения скрипта побольше
Плюс встречный вопрос а через Курл если сделать не подойдет ?
у меня есть хороший класс для работы с Курлом ;)
 
Ошибок не выдает, я так понимаю у меня время скрипта стоит 10 секунд или нет?
 
Обычно по умолчанию стоит 30 секунд на выполнение
В коде тот что ты написал не прописаны изменения времени работы скрипта

PHP:
<?php
phpinfo();
?>

phpinfo тебе покажет время выполнения скрипта
По памяти помню что обзывается этот параметр max_execution_time 30
Плюс еще есть функция set_time_limit которая может поставить на бесконечное выполнение скрипт

Через fsocks не совсем удобно послыать POST запросы
Так что мой совет посмотри в сторону cURL ;)
 
А можно проверку какую то поставить типа:

if(!$fp){
повторить скрипт!
}
 
А не боишся что скрипт будет зациклится до тех пор пока ты его не отключишь ? Такой код в сочетании с set_time_limit(0) может прилично нагрузить сервер, а в некоторых случаях и просто убить апач

Лучше сделать

if(empty($fp)){
exit('Ошиибка соединения, нашальника');
}
 
Из всего выше перечисленного получиться такой код правильно?

Код:
set_time_limit (0);

$data="name=$name&familiya=$familiya&username=$username&email=$email&password=$password";
$fp = fsockopen("www.mysite.ru", 80, $errno, $errstr, 10);
$out = "POST /exemple.php HTTP/1.1\n";
$out .= "Host: www.mysite.ru\n";
$out .= "Referer: www.mysite.ru/\n";
$out .= "User-Agent: Opera\n";
$out .= "Content-Type: application/x-www-form-urlencoded\n";
$out .= "Content-Length: ".strlen($data)."\n\n";
$out .= $data."\n\n";
fputs($fp, $out);
fclose($fp);

if(empty($fp)){
exit('Ошиибка соединения, нашальника');
}
:)
 
Код должен быть таким
PHP:
set_time_limit (0);
$data="name=$name&familiya=$familiya&username=$username&email=$email&password=$password";
$fp = fsockopen("www.mysite.ru", 80, $errno, $errstr, 10);
if(empty($fp)){
exit('Ошиибка соединения, нашальника');
}
$out = "POST /exemple.php HTTP/1.1\n";
$out .= "Host: www.mysite.ru\n";
$out .= "Referer: www.mysite.ru/\n";
$out .= "User-Agent: Opera\n";
$out .= "Content-Type: application/x-www-form-urlencoded\n";
$out .= "Content-Length: ".strlen($data)."\n\n";
$out .= $data."\n\n";
fputs($fp, $out);
fclose($fp);
незачем формировать заголовки для POST запроса если соединение не было открыто
И вообще вот тебе архив там cUrl класс он все сделает так как надо
Там даже простой пример авторизации на mail.ru есть
 

Вложения

  • bot.zip
    13,9 KB · Просмотры: 9
Спасибо тебе alfaexpert подсказал в каком направлении копать!
Я сделал проще вот так:
Код:
//инициализация сеанса
$ch = curl_init();
// установка URL и других необходимых параметров
curl_setopt($ch, CURLOPT_URL, "http://www.mysite.ru/exemple.php");
curl_setopt($ch, CURLOPT_POST, 1); //будет POST
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, '&name='. $name .'&familiya='. $familiya .'&username='. $username .'&email='. $email .'&password='. $password);
// загрузка страницы и выдача её браузеру
curl_exec($ch);
// завершение сеанса и освобождение ресурсов
curl_close($ch);
Работает на ура!:yahoo:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху