Socket

  • Автор темы nws
  • Дата начала
N
#1
Добрый день!
Есть форма в ней 2 поля: username/password
Мне необходимо пройти авторизацию с другого сервера
Вот функция:

Код:
function bot($server, $port, $path, $second)

{


$write = '';

$fp = fsockopen($server, $port, $errno, $errstr, $second);

if ($fp)

{

$write .= 'POST $path HTTP/1.0\r\n';

$write .= 'Host: $server\r\n\r\n';
$write .= 'username = vasea';
$write .= 'password =123456';



fwrite($fp, $write);

fclose($fp);

}else{
echo 'BORODA';	
}

}
Почему это:
Код:
$write .= 'username = vasea';
$write .= 'password =123456';
не передается в форму?
 
N
#2
Код:
function bot($server, $port, $path, $second)

{


$write = '';
$read = '';

$fp = fsockopen($server, $port, $errno, $errstr, $second);

if ($fp)

{
$params = "username=".urlencode("vasea")."&password=".urlencode("123456")."\r\n\r\n";
$size = strlen($params);

$write .= "POST $path HTTP/1.0\r\n";

$write .= "Host: $server\r\n";
$write .= "Content-Type: application/x-www-form-urlencoded\r\n";
$write .= "Cookie: lang=russian;\r\n";
$write .= "User-Agent: Vasea\r\n";
$write .= "Content-Length: $size\r\n";
$write .= "Connection: Close\r\n\r\n";
$write .= $params;

echo '<pre>';
echo $write;


fwrite($fp, $write);

while (!feof($fp)) {
$read .= fgets($fp, 8192);
}


for ($i = 5; $i < strlen($read); $i++)

{

if (substr($read, $i - 3, 4) == "\r\n\r\n")

{

$read = substr($read, $i + 1);

$i = strlen($read);

}

}

fclose($fp);

}

else

{

$read = "";

}



return $read;


}
 
L

lazutov

#3
1) параmетры должны передаватся в заголовке POST

Код:
<?
$host="host.ru";
$addr="/index.php"; //форма
$useragent="User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:3.0.0.1)"; 
$login=""; 
$password="";
$data="UserName=$login&PassWord=$password";
$request=
"POST $addr HTTP/1.1\r\n".
"Accept: */*\r\n".
"Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n".
"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n".
"Accept-Encoding: gzip,deflate\r\n".
"User-Agent: $useragent\r\n".
"Host: $host\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"Content-Length: ".strlen($data)."\r\n".
"Connection: Close\r\n\r\n$data";

// послать и получить ответ ,полагаю, сами сможете. 
?>

Вариант 2 , что красивее и удобнее

Код:
$url = "http://www.site.ru/form.php";
$login = ''; 
$password = '';
$ch = curl_init(); // открыли курл
curl_setopt($ch, CURLOPT_URL,$url); // куда посылаем 
curl_setopt($ch, CURLOPT_HEADER, 0); // нам НЕ нужны заголовки
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // резалт помащать в переменную, а не выводить 
curl_setopt($ch, CURLOPT_TIMEOUT, 3); // макс время одидания 
curl_setopt($ch, CURLOPT_POST, 1); // POST будет использоваться
curl_setopt($ch, CURLOPT_POSTFIELDS, "UserName=$login&PassWord=$password1"); // сами значения
$result = curl_exec($ch); // запустим запрос 
curl_close($ch); // закрыли курл 
//страница загружена в $result