Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Имитация браузера-запрос методом post

Автор: NeveR_Mind
Дата сообщения: 24.05.2006 17:58
Cheery
Спасибо. После твоих разъяснений стало понятней! Но всё равно не получилось
Теперь мне выдается "1".
Вот мой скрипт:

Код:
<?php
$vars = "&user=user&pass=pass&";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://tachka:4080/fw/auth');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT,40);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$kuku=curl_exec ($ch);

print_r(curl_getinfo($ch));
echo "\n\ncURL error number:" .curl_errno($ch);
echo "\n\ncURL error:" . curl_error($ch);

curl_close ($ch);

echo("<xmp>$kuku</xmp>");
?>
Автор: edogs
Дата сообщения: 24.05.2006 18:53
NeveR_Mind

Цитата:
А теперь вот такой вопрос:
как все эти действия скрыть от пользователя?
Т.е. как бы сделать чтобы данные передавались от имени пользователя а результирующая страница в переменную записалась бы? такое возможно?

Фактически Вам надо сделать проксик. Получили данные от юзера - их же послали на тот сервер. Получили в ответ данные сервера - показали их юзеру (подправили ссылки что бы они на Вас были). И т.д.
Автор: NeveR_Mind
Дата сообщения: 24.05.2006 19:13
edogs

Цитата:
Фактически Вам надо сделать проксик. Получили данные от юзера - их же послали на тот сервер. Получили в ответ данные сервера - показали их юзеру (подправили ссылки что бы они на Вас были). И т.д.

Хмм...как только его делать непонятно....
Пока я просто открываю новую страницу, и сразу её закрываю...т.е. пользователь не замечает ничего..однако и ответ сервера проконтролировать нельзя... правильность ввода можно и ДО проверить..а вот если сервер допустим недоступен или какая ошибка - таким образом неузнать...
"прокси" - это конечно удобней...но как это сделать?

Добавлено:
причем curl использовать неполучается т.к. запрос идет с другого ip (сервера)...и соответсвенно другой результат приходит...
Автор: 0x7d26a
Дата сообщения: 24.05.2006 19:50
Cheery
Немного изменил код

Код:
$ua->agent($usAgent);
$ua->cookie_jar($Cookie);
my $req = HTTP::Request->new(POST=>$url);
$req->referer($referrer);
$req->content_type('form-data');
$req->content('user' => '0x7d26a', 'pass' => 'pass', 'action'=> 'login', '1action' => 'GetByDomain', 'domain' => '....');
my $response = $ua->request($req);
if ($response->is_success)
{
print "OK";
$Cookie->extract_cookies($response);
$Cookie->save($CookieFile);
}
else
{
print "FAIL( @{[$response->status_line()]})";
}
Автор: edogs
Дата сообщения: 24.05.2006 21:52
NeveR_Mind
Если ответ сервера зависит в т.ч. от ИП, и существенно, то никак не выкрутитесь. Если только клиентские приложения запускать. Хотя. Вот. Подумайте ещё о флэше. На флэш можно написать интерфейсик который данные куда надо пошлет, получит ответ, и пошлет уже в другое место + совместить с курлом и вуаля.
P.S.: А зачем это?
Автор: NeveR_Mind
Дата сообщения: 25.05.2006 19:25
edogsПонятно. так я и думал.... в принципе я обошелся способом как ты написал, за что ещё раз спасибо ...
А нужно было для того, что есть моя собственная система и другая(не моя). чтобы два раза пользователю не приходилось авторизовываться в разных системах..я сделал авторизацию во второй системе из моей автоматом...причем это всё в локальной сети и там играет роль ip...объяснять долго..но ты мне помог..всё получилось. сенкс дальше уже вопрос простого интереса....
Автор: Cheery
Дата сообщения: 25.05.2006 19:27
0x7d26a

Цитата:
создаётся файл куков но в нём тока: #LWP-Cookies-1.0

ну.. а вообще куки передаются от сервера? может потому и пустой файл, что их нет?
Автор: 0x7d26a
Дата сообщения: 25.05.2006 20:20
Cheery

Цитата:
ну.. а вообще куки передаются от сервера? может потому и пустой файл, что их нет?

Точно передаются, т.к. после авторизации осёл ИЕ нормально их записывает.
Пробовал вывести контент в файл (print OUT $response->content;) результат: "Error: no action"
Не знаю что и делать

Добавлено:
пробовал перейти ослом ИЕ по адресу domain/cgi-bin/login.cgi - результат: "Error: no action"

Добавлено:
Cheery
Я всё-таки доковырял скрипт
Попробовал переписать строку так:

Код: $req->content("user=0x7d26a&pass=passwd&action=login&1action=GetByDomain&domain=....");
Автор: Delphi6
Дата сообщения: 25.05.2006 23:12
0x7d26a
Посмею ответить не прочитав большинство ответов в теме. Если проблема заключается в симуляции пользователя. То я думаю вам смогу помочь. У меня есть несколько примеров которые показывают как работать с серваком, как передавать данные методом POST, как сохранять куку и т.д. Для всех примеров вам понадобиться библиотека curl которая установлена на большинстве хостингов. Если curl вас устраивает то опишу мои примеры.

Добавлено:
Сори вижу проблема уже решена
Автор: Oleg_Tarusov
Дата сообщения: 27.05.2006 00:02
Вот я некоторый класс на PHP написал, он пока не полностью дописан, поэтому я его в полезные решения не пихаю.
Файл form.php, где лежит класс
[more]
Код:
<?php
class Form {
     var $Fp;
         //var $Page;
var $Referer;        
         var $Length;
         var $POSTData;
         var $Host;
         function connect($site) {
         $this->Fp = fsockopen ($site, 80);
         }
         function disconnect() {
         fclose ($this->Fp);
         }
         function addPOSTData($string) {
         if (strlen($this->POSTData) > 0)
         $this->POSTData .= '&';
             $this->POSTData .= $string;
             $this->Length = strlen($this->POSTData);
         }
         function send($page = "") {
         fputs ($this->Fp, "POST /$page HTTP/1.0\r\n");
             fputs ($this->Fp, "Host: $this->Host\r\n");
             if ($this->Referer != "")
             fputs ($this->Fp, "Referer: $this->Referer\r\n");
     fputs ($this->Fp, "Content-Type: application/x-www-form-urlencoded\r\n");
     fputs ($this->Fp, "Content-Length: $this->Length\r\n");
     fputs ($this->Fp, "\r\n");
     fputs ($this->Fp, "$this->POSTData\r\n");
             /*$pos = strpos($this->Fp,"Content");
             $text = substr($this->Fp,$pos);*/
         }
         function echoGet() {
         while (!feof($this->Fp)) {
echo fgets ($this->Fp,128);
}
         }
         /*function echoPage() {
         echo $this->Page;
         }*/
         function setHost($host = "") {
         $this->Host = $host;
         }
         function setReferer($referer = "") {
         $this->Referer = $referer;
         }
     }
?>
Автор: NeveR_Mind
Дата сообщения: 30.05.2006 19:28
[b]Delphi6[b]
Приводи примеры, не стесняйся
Автор: Cheery
Дата сообщения: 10.01.2008 21:37
сюда же
PHP: POST-запрос на https
Автор: grikdotnet
Дата сообщения: 11.01.2008 00:46
Я выложил класс-обертку для cURL на PHP:
http://www.phpclasses.org/browse/package/4322.html
Там в примерах есть и POST, и Cookies, a SSL (HTTPS) сам cURL обрабатывает
Автор: ForposT_ForeveR
Дата сообщения: 24.12.2008 23:02
КОД
<?php
$vars = "?id=6daa21097987831ec36260d9a6aa47f1&action=add&UserName=HappyNewYear&UserMessage=Happy+New+Year&m=1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://gelanie.com/elka.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);

curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT,40);
// запишем ответ в переменную
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$kuku=curl_exec ($ch);
curl_close ($ch);

echo("<xmp>$kuku</xmp>");
?>


Работает код)



Рабочий код...

<?php
$vars = "&id=6daa21097987831ec36260d9a6aa47f1&action=add&UserName=HappyNewYear&UserMessage=Happy+New+Year&m=1&";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://gelanie.com/elka.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT,40);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$kuku=curl_exec ($ch);

print_r(curl_getinfo($ch));
echo "\n\ncURL error number:" .curl_errno($ch);
echo "\n\ncURL error:" . curl_error($ch);

curl_close ($ch);

echo("<xmp>$kuku</xmp>");
?>



Вопрос снят.
Спасибо Cheery за помощь)
Автор: Cheery
Дата сообщения: 24.12.2008 23:36
ForposT_ForeveR

Цитата:
Не работает код)


Ещё один нерабочий код...

не слишком ли резкие заявления? может у кого то просто руки кривые?
если вы не посылаете все данные из формы, то и нет гарантии, что работает.
смотрим как и что передается.. значения из формы - через POST.. а вот add и так далее - через GET
Автор: ForposT_ForeveR
Дата сообщения: 25.12.2008 19:22

Цитата:
может у кого то просто руки кривые?


Абсолютно с Вами согласен)


Цитата:
смотрим как и что передается.. значения из формы - через POST.. а вот add и так далее - через GET


Спасибо, всё работает)
Автор: ForposT_ForeveR
Дата сообщения: 08.01.2009 02:29
Здравствуйте, ещё раз)
Как осуществить имитацию загрузки файла.

Код:
<form action="http://server2.ru/test.php" name="go" method="post" enctype="multipart/form-data" target="_blank">
<input type=file ...>
</form>
Автор: Cheery
Дата сообщения: 08.01.2009 02:57
ForposT_ForeveR
http://w-shadow.com/blog/2007/10/08/how-to-really-upload-files-with-php/
Автор: ForposT_ForeveR
Дата сообщения: 26.03.2009 00:38
Здравствуйте.
Подскажите пожалуйста, что и куда надо передавать, чтобы через РНР можно было запустить форму. ( __http://www.multitamil.com/tamilnet/index.php )
Заранее огромнейшее спасибо.
Автор: Cheery
Дата сообщения: 26.03.2009 00:46
ForposT_ForeveR

Цитата:
Подскажите пожалуйста, что и куда надо передават

поставьте примочку Live HTTP headers для FF и изучайте
Автор: ForposT_ForeveR
Дата сообщения: 26.03.2009 00:50
Есть несколько вопросов по переменным:

<input type="checkbox" name="hl[accept_cookies]" checked="checked" /> - как её передать?

<input type="checkbox" name="hl[remove_scripts]" /> и стоит ли передавать переменные такого типа, когда они не выбраны
Автор: Cheery
Дата сообщения: 26.03.2009 00:54
ForposT_ForeveR

Цитата:
как её передать?

как обычно.. если отмечено - передается.. если не отмечено - не передается
Автор: ForposT_ForeveR
Дата сообщения: 26.03.2009 01:10
$vars = "?q=$url&hl[accept_cookies]=on&hl[show_images]=on&hl[show_referer]=on&hl[session_cookies]=on";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://www.multitamil.com/tamilnet/index.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT,40);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$test=curl_exec ($ch);
curl_close ($ch);

Не работает так, каких-то переменных не хватает.
Автор: Cheery
Дата сообщения: 26.03.2009 01:14
ForposT_ForeveR

Цитата:
Не работает так, каких-то переменных не хватает.

блин.. я же сказал - смотрите с помощью примочки для Firefox
то, что по умолчанию

Цитата:
http://www.multitamil.com/tamilnet/index.php

POST /tamilnet/index.php HTTP/1.1
Host: www.multitamil.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.multitamil.com/tamilnet/index.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 228
q=http%3A%2F%2Fwww.tamilnet.com&hl%5Binclude_form%5D=on&hl%5Bremove_scripts%5D=on&hl%5Baccept_cookies%5D=on&hl%5Bshow_images%5D=on&hl%5Bshow_referer%5D=on&hl%5Bbase64_encode%5D=on&hl%5Bstrip_meta%5D=on&hl%5Bsession_cookies%5D=on
Автор: ForposT_ForeveR
Дата сообщения: 26.03.2009 01:23


Код: $vars = "?q=http%3A%2F%2Fwww.tamilnet.com&hl%5Binclude_form%5D=on&hl%5Bremove_scripts%5D=on&hl%5Baccept_cookies%5D=on&hl%5Bshow_images%5D=on&hl%5Bshow_referer%5D=on&hl%5Bbase64_encode%5D=on&hl%5Bstrip_meta%5D=on&hl%5Bsession_cookies%5D=on";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://www.multitamil.com/tamilnet/index.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT,40);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$test=curl_exec ($ch);
curl_close ($ch);
Автор: Cheery
Дата сообщения: 26.03.2009 01:24
ForposT_ForeveR

Цитата:
Всё равно не работает

знак вопроса зачем?

Цитата:
?q=

+ добавить curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
Автор: ForposT_ForeveR
Дата сообщения: 26.03.2009 01:26
Без знака вопроса вообще ничего не выводит
После этого кода стоит
echo $test;
Автор: Cheery
Дата сообщения: 26.03.2009 01:26
ForposT_ForeveR

Цитата:
Без знака вопроса вообще ничего не выводит
После этого кода стоит
echo $test;

в третий раз повторяю - используйте Live HTTP headers.. ну что за дет сад???
там идет редирект.


Цитата:
добавить curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);

Автор: ForposT_ForeveR
Дата сообщения: 27.04.2009 23:31
Здравствуйте, уважаемые форумчане.
Подскажите пожалуйста, как авторизоваться на сайте http://ruboardcom.ya.ru через скрипт, для выполнения дальнейших действий.
Заранее огромное спасибо
Автор: Cheery
Дата сообщения: 27.04.2009 23:33
ForposT_ForeveR

Цитата:
Подскажите пожалуйста, как авторизоваться на сайте

ставите любую программу для просмотра заголовков обмена - и вперед

Страницы: 1234

Предыдущая тема: Язык программирования Python (Питон, Пайтон)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.