Перехват выполнения чужого скрипта
Как обработать средствами РНР результат выполнения чужого скрипта, вызванного из формы. Например:
<form action=http://somesite.net? method=post>
<input type=text name=USERNAME>
<input type=submit name=submit value='Login'>
</form>
Проблема в том, что чужой скрипт генерит HTML, где в одном из hidden полей хранится пароль (ну не умеют их программеры сессии создавать!).
<form action=http://somesite.net? method=post>
<input type=text name=USERNAME>
<input type=submit name=submit value='Login'>
</form>
Проблема в том, что чужой скрипт генерит HTML, где в одном из hidden полей хранится пароль (ну не умеют их программеры сессии создавать!).
Из формы вызываешь свой скрипт, который в свою очередь вызывает чужой скрипт, делаешь с результатом все что надо и выдаешь пользователю.
Идея ясна. Вот только как его вызвать и передать POST переменную USERNAME? Просто проблема в том, что я пробовал сделать это через сокеты (очевидно это не совсем верный путь).
Да, к слову - привет, земляк!
Да, к слову - привет, земляк!
В Perl есть модули - эмуляторы агентов пользователя (броузеры). Там все делается лекго и просто, хоть GET, хоть POST. Как в PHP это оформить я не знаю.
Прямо через сокеты, впрочем, тоже не большая проблема.
Прямо через сокеты, впрочем, тоже не большая проблема.
В принципе понял - мыслил я правильно, через сокеты можно. Как я понял, надо будет этот самый POST передать с помощью socket_write(). Я полазил по нету и нашел следующую вещь:
POST http://swig.stanford.edu/ISPACE/ads.acc ... egatorHttp HTTP/1.1
X-User-Id: adsuser
X-Cmd-Tag: photoalbum
X-Bundle-Id: picture1
Content-Type: text/plain
Content-Length: 26
Если честно - не все из этого я понял. Как ее переделать под свои нужды? У меня 2 POST переменные PASSWORD и USERNAME. Может так?
POST http://somesite.net/script.exe? HTTP/1.1
USERNAME: $HTTP_POST_VARS[USERNAME]
PASSWORD: $HTTP_POST_VARS[PASSWORD]
Content-Type: text/plain
Content-Length: ??????? (здесь надо подсчитать длину логина и пароля?)
Вообще-то я по сетям и железу специализируюсь... А тут блин на работе привязались - ну никак не отвертется
POST http://swig.stanford.edu/ISPACE/ads.acc ... egatorHttp HTTP/1.1
X-User-Id: adsuser
X-Cmd-Tag: photoalbum
X-Bundle-Id: picture1
Content-Type: text/plain
Content-Length: 26
Если честно - не все из этого я понял. Как ее переделать под свои нужды? У меня 2 POST переменные PASSWORD и USERNAME. Может так?
POST http://somesite.net/script.exe? HTTP/1.1
USERNAME: $HTTP_POST_VARS[USERNAME]
PASSWORD: $HTTP_POST_VARS[PASSWORD]
Content-Type: text/plain
Content-Length: ??????? (здесь надо подсчитать длину логина и пароля?)
Вообще-то я по сетям и железу специализируюсь... А тут блин на работе привязались - ну никак не отвертется

Должно выглядеть примерно так:
Перед передачей данных обязательно должна быть пустая строка.
Код: Выделить всё
POST /script.exe HTTP/1.1
Host: somesite.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
PASSWORD=mypass&USERNAME=myuser
Спасибо! Вот теперь все понятно! Это была последняя загвоздка.. Вечером попробую реализовать![/b]
Sorry, 4to na latinice, s laptja pishu...
Vot ono, reshenije! es4o raz spasibo churu
<?php
echo "Starting...
";
$vars = "log=tester&pass=qwerty";
$varlen = strlen($vars);
$sock = fsockopen ("127.0.0.1", 80, $errno, $errstr);
// Peredajem post scriptu proga.exe
fputs($sock, "POST /cgi/proga.exe? HTTP/1.0\r\n");
fputs($sock, "Host: www.somesite.net\n");
fputs($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($sock, "Content-length: {$varlen}\r\n");
fputs($sock, "Accept: */*\r\n");
fputs($sock, "\r\n");
fputs($sock, "$vars\r\n");
fputs($sock, "\r\n");
// Videljajem header
$headers = "";
while ($str = trim(fgets($sock, 4096)))
$headers .= "$str\n";
// soxranjajem rezuljtat ispolnenija proga.exe v peremennuju $html
$html="";
while (!feof($sock)) { $html .= fgets($sock,1024); }
fclose ($sock);
echo $html;
?>
Vot ono, reshenije! es4o raz spasibo churu

<?php
echo "Starting...
";
$vars = "log=tester&pass=qwerty";
$varlen = strlen($vars);
$sock = fsockopen ("127.0.0.1", 80, $errno, $errstr);
// Peredajem post scriptu proga.exe
fputs($sock, "POST /cgi/proga.exe? HTTP/1.0\r\n");
fputs($sock, "Host: www.somesite.net\n");
fputs($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($sock, "Content-length: {$varlen}\r\n");
fputs($sock, "Accept: */*\r\n");
fputs($sock, "\r\n");
fputs($sock, "$vars\r\n");
fputs($sock, "\r\n");
// Videljajem header
$headers = "";
while ($str = trim(fgets($sock, 4096)))
$headers .= "$str\n";
// soxranjajem rezuljtat ispolnenija proga.exe v peremennuju $html
$html="";
while (!feof($sock)) { $html .= fgets($sock,1024); }
fclose ($sock);
echo $html;
?>