Перехват выполнения чужого скрипта

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
Jevgenij
Сообщения: 12
Зарегистрирован: 01 сен 2004, 12:13

01 сен 2004, 12:45

Как обработать средствами РНР результат выполнения чужого скрипта, вызванного из формы. Например:

<form action=http://somesite.net? method=post>
<input type=text name=USERNAME>
<input type=submit name=submit value='Login'>
</form>

Проблема в том, что чужой скрипт генерит HTML, где в одном из hidden полей хранится пароль (ну не умеют их программеры сессии создавать!).
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

01 сен 2004, 17:41

Из формы вызываешь свой скрипт, который в свою очередь вызывает чужой скрипт, делаешь с результатом все что надо и выдаешь пользователю.
Jevgenij
Сообщения: 12
Зарегистрирован: 01 сен 2004, 12:13

03 сен 2004, 15:17

Идея ясна. Вот только как его вызвать и передать POST переменную USERNAME? Просто проблема в том, что я пробовал сделать это через сокеты (очевидно это не совсем верный путь).
Да, к слову - привет, земляк!
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

03 сен 2004, 18:06

В Perl есть модули - эмуляторы агентов пользователя (броузеры). Там все делается лекго и просто, хоть GET, хоть POST. Как в PHP это оформить я не знаю.
Прямо через сокеты, впрочем, тоже не большая проблема.
Jevgenij
Сообщения: 12
Зарегистрирован: 01 сен 2004, 12:13

03 сен 2004, 18:38

В принципе понял - мыслил я правильно, через сокеты можно. Как я понял, надо будет этот самый 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: ??????? (здесь надо подсчитать длину логина и пароля?)

Вообще-то я по сетям и железу специализируюсь... А тут блин на работе привязались - ну никак не отвертется ;)
chur
Сообщения: 195
Зарегистрирован: 17 фев 2004, 10:44
Откуда: Riga, Latvia

04 сен 2004, 13:21

Должно выглядеть примерно так:

Код: Выделить всё

POST /script.exe HTTP/1.1
Host: somesite.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 31

PASSWORD=mypass&USERNAME=myuser
Перед передачей данных обязательно должна быть пустая строка.
Jevgenij
Сообщения: 12
Зарегистрирован: 01 сен 2004, 12:13

04 сен 2004, 15:29

Спасибо! Вот теперь все понятно! Это была последняя загвоздка.. Вечером попробую реализовать![/b]
Jevgenij
Сообщения: 12
Зарегистрирован: 01 сен 2004, 12:13

15 сен 2004, 02:47

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;
?>
Ответить