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

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

Автор: webdeveloper
Дата сообщения: 04.12.2002 20:27
Как сделать запрос к отдалённому серверу, но только используя метод post передать определенные значения. Нужен пример на Perl или Php

Добавлено
Зы, подчёкриваю ПОСТ,библиотека LWP в perl или fopen в PHP тут врядли помогут
Автор: Vinsent_Vega
Дата сообщения: 04.12.2002 21:12
webdeveloper
LWP вполне позволяет делать пост. Она и предназначена для эмуляции клиента пользователя (браузера). А на ПХП такое сделать проблематично сильно.
Автор: Zuga_Zuga
Дата сообщения: 04.12.2002 21:29

Цитата:
А на ПХП такое сделать проблематично сильно.

Просто надо знать волшебное слово, все делается без особых проблем. Благо классов уже понаписанно достаточно.
Так что 3 строки - и вы в посте
Автор: webdeveloper
Дата сообщения: 04.12.2002 21:30
Vinsent_Vega

Цитата:
LWP вполне позволяет делать пост

Спасибо, нашол,если кому надо вот код:

Код:
#!/usr/bin/perl -w

use LWP::UserAgent;
use strict;

my $content = "file=codehttp.xml";
my $header = new HTTP::Headers(
Content_Type => 'application/x-www-form-urlencoded',
);

my $ua = new LWP::UserAgent;
my $request = new HTTP::Request(
POST => 'http://www.perlhelp.de/', );

my $response = $ua->request($request);
print $response->as_string;
Автор: lucky
Дата сообщения: 05.12.2002 10:34
webdeveloper
если тебе все еще интересно про LWP почитать (на русском) посмотри новость от 14 февраля 2001
Автор: webdeveloper
Дата сообщения: 05.12.2002 12:35
lucky
Спасибо
По LWP есть доки на cpan, на ридном английском языке
Автор: hamshen
Дата сообщения: 05.12.2002 15:17
webdeveloper

Цитата:
А подробней?


http://pear.php.net/package-info.php?pacid=33
http://phpclub.mirrors.phpclasses.org/search.html?words=http+post&restrict=&method=and&sort=score&go_search=1&page=1
Автор: Sergeant
Дата сообщения: 06.12.2002 03:34
А чем fsockopen(); проблематичного PHP не устраивает?
Автор: Slippery
Дата сообщения: 08.12.2002 17:19
самый простой и надежный способ имитировать браузер - это использовать библиотеку СURL:

Код:
<?php
$vars = "&Chtoto=chemuto&Chtoto=chemuto&Chtoto=chemuto&Chtoto=chemuto&Chtoto=chemuto&";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://Kuda nado poslat'');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
// пусть думают что наш скрипт - это Эксплорер 5
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>");
?>
Автор: plokijuh30000
Дата сообщения: 22.03.2003 02:03
Есть известные способы передачи PHP-переменных на какой-нидь хост:
1. <form ...
2. header(Location: http://host.com/ind.php?var1=1&var2=2);
3. curl
4. fsockopen() - fputs()
А можно ли методом POST (чтобы в строке браузера линк был не http://host.com/ind.php?var1=1&var2=2 , а просто http://host.com) отправить PHP-vars на какой-нидь хост с помощью функции header()
PS: я пропарился - пока не получилось. Возможно ли енто вообще???
Автор: plokijuh30000
Дата сообщения: 24.03.2003 16:07
Неужели нито не встречался с проблемой? Как передать POST и переметнуться на POST страницу, т.е. повторить <form>submit </form> с помощью PHP
Автор: Cheery
Дата сообщения: 24.03.2003 16:20

Цитата:
Неужели нито не встречался с проблемой? Как передать POST и переметнуться на POST страницу, т.е. повторить <form>submit </form> с помощью PHP

Нет, нельзя. Подумай сам.. Что передается с помощью headers? Просто строка. Тоже самое, что и при методе GET, а при методе POST данные передаются внутри, значит просто headers не обойдешься.
Автор: plokijuh30000
Дата сообщения: 25.03.2003 17:01
Ok, все логично, а давайте-ка прикинем:
раз с помощью headers() - нельзя, то вообще как бы передать переменные PHP с своего хоста на другой хост и чтобы при ентом у юзверя в браузере была красивая строка типа http://host.com

И звестно: при нажатии submit в форме
<form action=http://host.com>
<input type=text name=var value=3>
<input type=submit></form>
откроется страничка http://host.com, при ентом браузер передаст на http://host.com,
переменную var=3;
в ссылочной строке браузера будет
Цитата:
http://host.com
, а не http://host.com/?var=3


Цитата:
ЦЕЛЬ: как то же самое сделать на PHP?



Добавлено
Вот здесь: http://www.phpclasses.org/browse.html/class/6.html куча примеров реализации POST с помощью PHP. PS: да все прекрасно - POST отправляется...


Цитата:
НО ПРОБЛЕМА:


К примеру если отправляется POST запрос с http://myhost.com/phppage.php
на http://host.com/ все переменные при ентом благополучно отправлятся на http://host.com/
НО остаюсь я по прежнему на своей page http://myhost.com/phppage.php

Если далее переметнуться header(Location: http://host.com/) -> ебстебственно при ентом все переменные теряюся , а header(Location: http://host.com/?var=3) те же самые дрова, которые рубили...

КТО-НИДЬ ВСТРЕЧАЛСЯ С РЕШЕНИЕМ ПРОБЛЕМЫ?
Автор: hamshen
Дата сообщения: 25.03.2003 19:37
plokijuh30000

Цитата:
К примеру если отправляется POST запрос с http://myhost.com/phppage.php
на http://host.com/ все переменные при ентом благополучно отправлятся на http://host.com/
НО остаюсь я по прежнему на своей page http://myhost.com/phppage.php

Я думаю тебе соит посмотреть что содержит ответ от сервера. Ведь ты имитируешь браузер на php, вот и исходи из этого.
Автор: webdeveloper
Дата сообщения: 15.04.2003 15:27
Как сообщить в запросе о том что клиент поддерживает JavaScript?
Заранее спасибо
Автор: Cheery
Дата сообщения: 15.04.2003 20:26
webdeveloper
Никак.. эта инфа не передается.. Смотри дискуссии тут:
http://forum.ru-board.com/topic.cgi?forum=31&topic=2573#1
Автор: apatit
Дата сообщения: 11.08.2004 17:22
Всем привет!

Хочу поднять топик.

В общем, мне необходимо залогиниться на одном из сайтов по протоколу HTTPS. Например, на сайте www.regnow.com это делается без проблем. Собственно, там вообще сабмита как такового нет, просто идешь по нужной тебе ссылке по такой схеме https://login:password@www.regnow.com...

На сайте же shareit.com такой номер уже не проходит, пытаюсь логиниться, но меня постоянно возвращает на страницу регистрации, хотя ответ сервер выдает такой:

HTTP/1.1 200 OK Connection: Keep-Alive Date: Wed, 11 Aug 2004 14:16:00 GMT Server: Apache Content-Type: text/html; charset=iso-8859-1 Content-Type: text/html; charset=iso-8859-1 Client-Date: Wed, 11 Aug 2004 14:16:03 GMT Client-Peer: 217.65.128.71:443 Client-Response-Num: 1 Client-SSL-Cert-Issuer: /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority Client-SSL-Cert-Subject: /C=DE/ST=Northrhine Westfalia/L=Cologne/O=element 5 Informationstechnologien- und dienstleistungen AG/OU=Network Security/CN=secure.shareit.com Client-SSL-Cipher: DES-CBC3-SHA Client-SSL-Warning: Peer certificate not verified Client-Transfer-Encoding: chunked Keep-Alive: timeout=10, max=100 P3P: policyref="https://secure.element5.com/w3c/p3p.xml", CP="CAO DSP COR ADMo PSA CONo HIS OUR SAMo UNRo LEG UNI" Title: share-it! Control Panel

Код такой:


Код:
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request::Common qw(POST GET);
use strict;
use warnings;

print "Content-type: text/html; charset=windows-1251\n\n";

$|++;

my ($uri, $sessid, $random);

my $ua = LWP::UserAgent->new();

my $req = GET "https://secure.shareit.com/shareit/cp/login/index.html";
my $cont = $ua->request($req)->as_string;
if ($cont =~ /.*=(\d+)&.*=(\w+)"/g) {
$uri = "https://secure.shareit.com/shareit/cp/login/index.html?sessionid=$1&random=$2";
($sessid, $random) = ($1, $2);
}

$req = POST $uri,
[PUBLISHER_ID => "Login",
PASSWORD => "Password"];

$cont = $ua->request($req)->as_string;
print $cont;

exit();
Автор: Cheery
Дата сообщения: 11.08.2004 17:28
apatit

Цитата:
Где копать?


Цитата:
sessionid=$1&random=$2

уверено, что правильно распознаются? проверь

Цитата:
[PUBLISHER_ID => "Login",
PASSWORD => "Password"];

я бы запихнул еще и
name="SUBMIT_LOGINDATA" value="Login"
на всякий случай.
Автор: apatit
Дата сообщения: 11.08.2004 18:34
Cheery

Цитата:
Цитата:
sessionid=$1&random=$2

уверено, что правильно распознаются? проверь


Однозначно.


Цитата:
я бы запихнул еще и
name="SUBMIT_LOGINDATA" value="Login"
на всякий случай.


Неужто в POST это играет роль? Хотя кто их знает, этих немцев .
Автор: Cheery
Дата сообщения: 11.08.2004 18:49
apatit

Цитата:
Неужто в POST это играет роль? Хотя кто их знает, этих немцев

играет.. это тоже передается в скрипт и может использоваться
Автор: apatit
Дата сообщения: 12.08.2004 00:16

Цитата:
я бы запихнул еще и
name="SUBMIT_LOGINDATA" value="Login"


Попробовал запихнуть. Теперь выводится только

HTTP/1.1 302 Found Connection: Keep-Alive Date: Wed, 11 Aug 2004 21:11:33 GMT Location: https://secure.element5.com/esales/cp/overview/index.html?sessionid=132161422&random=f07dd150130c83f3bab43f491cd1b9ca Server: Apache Content-Type: text/html Client-Date: Wed, 11 Aug 2004 21:11:34 GMT Client-Peer: 217.65.128.71:443 Client-Response-Num: 1 Client-SSL-Cert-Issuer: /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority Client-SSL-Cert-Subject: /C=DE/ST=Northrhine Westfalia/L=Cologne/O=element 5 Informationstechnologien- und dienstleistungen AG/OU=Network Security/CN=secure.shareit.com Client-SSL-Cipher: DES-CBC3-SHA Client-SSL-Warning: Peer certificate not verified Client-Transfer-Encoding: chunked Keep-Alive: timeout=10, max=100 P3P: policyref="https://secure.element5.com/w3c/p3p.xml", CP="CAO DSP COR ADMo PSA CONo HIS OUR SAMo UNRo LEG UNI"

Страница регистрации больше не выводится.
Автор: Cheery
Дата сообщения: 12.08.2004 00:18
apatit

Цитата:
Страница регистрации больше не выводится.


Цитата:
Теперь выводится только

выводится как раз то, что нужно - редирект на нужную страницу

Цитата:
Location: https://secure.element5.com/esales/cp/overview/index.html?sessionid=132161422&random=f07dd150130c83f3bab43f491cd1b9ca

в LWP вроде бы можно сразу вытащить этот редирект и даже можно сказать, чтобы следовал редиректу...
Автор: apatit
Дата сообщения: 12.08.2004 16:14
Cheery

Цитата:
в LWP вроде бы можно сразу вытащить этот редирект и даже можно сказать, чтобы следовал редиректу...

Это не критично, важно, что мы туда попали .

А вообще -
Автор: apatit
Дата сообщения: 13.08.2004 01:21
Кхм. Тут продолжение темы есть. Похожая ситуация несколько, только тут еще и файл надо скачать (или как минимум, получить результат редиректа).

В общем, нужно зарегиться на сайте eSellerate и оттуда скачать файл EST (точнее, получить абсолютную ссылку на файл).

Вот код:


Код:
#!/usr/bin/perl -w

use LWP::UserAgent;

use HTTP::Request::Common qw(POST GET);
use strict;
use warnings;

print "Content-type: text/html; charset=windows-1251\n\n";

$|++;

my $ua = LWP::UserAgent->new();



#Get additional parameters sessioId and random

my $uri = "https://affiliates.esellerate.net/affiliates/Login.aspx";

my $req = GET $uri;

my $cont = $ua->request($req)->as_string;

my $viewstate = $1 if $cont =~ m{name="__VIEWSTATE" value="(.*)" />}gim;

#~ #Post the authorisation form - log into ShareIt

$req = POST $uri,
[LoginName => "login",
Password => "password",
__VIEWSTATE => "$viewstate",
iLogin => "Login"];

$cont = $ua->request($req)->as_string;


exit();
Автор: Cheery
Дата сообщения: 13.08.2004 01:26
apatit

Цитата:
"https://affiliates.esellerate.net/affiliates/ProductDetail.aspx?SSLIDC=9196109420&tab=2";

откуда линк??
Автор: apatit
Дата сообщения: 13.08.2004 08:46
Cheery

Цитата:
откуда линк??


Да, собственно, просто линк, который в зависимости от залогиненности должен либо дать редирект-ссылку на скачивание, либо предложить залогиниться.
Автор: Cheery
Дата сообщения: 13.08.2004 19:14
apatit

Цитата:
Да, собственно, просто линк, который в зависимости от залогиненности должен либо дать редирект-ссылку на скачивание, либо предложить залогиниться.

просто линк? а куки? как, по твоему, поддерживается авторизация?
Автор: apatit
Дата сообщения: 14.08.2004 00:40
Cheery

Цитата:
просто линк? а куки? как, по твоему, поддерживается авторизация?


Намекаешь на cookie_jar?
Автор: Cheery
Дата сообщения: 14.08.2004 00:44
apatit

Цитата:
Намекаешь на cookie_jar?

намекаю на то, что после авторизации должен передаваться какой то параметр серверу, чтобы он знал, что ты уже авторизирован. поэтому проверь - не передается ли параметр, который теряешь при обращении к файлу.
Автор: apatit
Дата сообщения: 14.08.2004 01:00
Cheery

Цитата:
поэтому проверь - не передается ли параметр, который теряешь при обращении к файлу.

Параметр есть, только форма не сабмитится. Другое дело, есть там в заголовке такая штука

Set-Cookie: ASP.NET_SessionId=blablabla; path=/

Это оно?

Страницы: 1234

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


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