как отправить post-запрос в perl?
при образщении к серваку ты должен 1) указать хедер 2) указать данные
хедер ты указываешь
а данные?
мне верней даж наоборот кажется
что ты указываешь хедер в том месте где указываешь данные
по идее должно быть как-то так:
$ua->header - тут все что ты указал
ua->post(а вот тут данные)
эххх
поборол лень
открыл ман
http://search.cpan.org/~gaas/libwww-perl-5.805/lib/LWP/UserA...
так и есть как я говорил, ты хедер в данные пихаешь
2) указать данныеа данные могут быть пустыми? вся необходимая инфа, а именно, параметр smdc_data передаются в заголовке
в хедере передаются настройки, типа кукисы или версия браузера
в данных передаются сами данные
обычно хедер можно ваще не куказывать
$ua->post(url, ['smdc_data' => '30']);
вот их код
http://smdc.sinp.msu.ru//aux/loader.js
тебе надо вот это:
this.req.open('POST',url,true);
this.req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
this.req.setRequestHeader("Content-length", parameters.length);
this.req.setRequestHeader("Connection", "close");
this.req.setRequestHeader("smdc_data",parameters);
this.req.send('');
эти засранцы и вправду в данных ничего не отправляют, а smdc_data отправляют в хедере
это типа защита от дураков что ли?
вот твой код:
$ua->default_headers->push_header('Content-type' => "application/x-www-form-urlencoded");
...
$ua->default_headers->push_header('smdc_data' => "lalala");
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
$ua->default_headers->push_header('Content-type' => 'application/x-www-form-urlencoded');
$ua->default_headers->push_header('User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru;
rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14');
$ua->default_headers->push_header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;
q=0.8,image/png,*/*;q=0.5');
$ua->default_headers->push_header('Accept-Language' => 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3');
$ua->default_headers->push_header('Accept-Encoding' => 'gzip,deflate');
$ua->default_headers->push_header('Accept-Charset' => 'windows-1251,utf-8;q=0.7,*;q=0.7');
$ua->default_headers->push_header('Keep-Alive' => '300');
$ua->default_headers->push_header('Connection' => 'close');
$ua->default_headers->push_header('Content-Type' => 'application/x-www-form-urlencoded');
$ua->default_headers->push_header('smdc_data' => 'p15=p15...и проч и проч.');
$ua->default_headers->push_header('Referer' => 'http://smdc.sinp.msu.ru/index.py?nav=coronasf');
$ua->default_headers->push_header('Content-Length' => '0');
$ua->default_headers->push_header('Pragma' => 'no-cache');
$ua->default_headers->push_header('Cache-Control' => 'no-cache');
$content = $ua->post('http://smdc.sinp.msu.ru/data.py/redirect');
print $content->as_string;
В развитие темы - подскажите, кто-нибудь, прогу, чтобы смотреть, какие запросы я отправляю на сервер. Это, вроде, называется, сниффер. Я поставил TCPView.exe, а он меня сетки лишил совсем.
WireShark
и увидеть что улетает на сервак
а потом тупо это воспроизвести
потом
зачем ты опять ВСЕ свои параметры шлешь?
попробуй только те что в джаваскрипте послать
например content-type ns два раза шлешь, будь я серваком я бы на такое точно обиделся бы
зачем ты опять ВСЕ свои параметры шлешь?
попробуй только те что в джаваскрипте послать
Думаешь, я не попробовал? То же самое.
Еще, скажите, не надо ли экранировать & в параметрах?
WireSharkИ какой там network interface указывать? Сам он нифига не нашел.
Интерфейс это что из нижеперечисленного? Я попробовал написать "Hackers - Ethernet адаптер", он, как и следовало ожидать, сказал, что "unable to open interface"
Hackers - Ethernet адаптер:
DNS-суффикс этого подключения . . : hackers
IP-адрес . . . . . . . . . . . . : 172.16.54.5
Маска подсети . . . . . . . . . . : 255.255.252.0
Основной шлюз . . . . . . . . . . : 172.16.52.1
Еще, скажите, не надо ли экранировать & в параметрах?ну wireshark же показывает как есть
хотя может эта гадина экранирует обратно?
брррр, там же в нижнем окошечке tcpdumpp показан - дык там тож нет экранирования
включил tcpdump на перл
дык там летит Smdc-Data вместо smdc_data
перл преобразовал название
получилось
в библиотеке HTTP::Headers.pm
там вначале такая строчка:
# The $TRANSLATE_UNDERSCORE variable controls whether '_' can be used
# as a replacement for '-' in header field names.
$TRANSLATE_UNDERSCORE = 1 unless defined $TRANSLATE_UNDERSCORE;
я перл не знаю, поэтому не знаю как поставить этот $TRANSLATE_UNDERSCORE заранее
я тупо поправил этот файл
единичку заменил на нолик
запустил твой скрипт - УРААААААА
лучше все таки узнать как править глобальные переменные другого пакета
а то чегонить другое в системе полетит...
это ж легко
use strict;
use LWP::UserAgent;
$HTTP::Headers::TRANSLATE_UNDERSCORE = 0;
...
эхх
терь на работу опаздываю
с тебя пиво вощем
Реально, ура! Работает. Ты какое пиво любишь?
Оставить комментарий
Elina74
Понимаю, боянный и дурацкий вопрос, но все мои потуги решить его в данном конкретном случае не увенчались успехом.Если смотреть с помощью Live HTTP Headers, запрос получается такой:
Я пишу прогу типа
сервер мне выдает
500 - internal server error
Видимо, я не правильно сформировал запрос. Вопрос - как это сделать правильно?