Очистка веб-сайта ASP.Net с переменными POST в PHP - PullRequest
0 голосов
/ 09 сентября 2010

Последние несколько дней я пытался очистить веб-сайт, но пока безуспешно.

Ситуация следующая: Веб-сайт, который я пытаюсь очистить, требует данных из формы, представленной ранее. Я распознал переменные, необходимые для веб-приложения, и выяснил, какие заголовки HTTP отправляются исходным веб-приложением.

Поскольку у меня почти нулевые знания в ASP.net, я решил спросить, не упускаю ли я что-то здесь.

Я пробовал разные методы (CURL, получить содержимое и класс Snoopy), вот мой код метода curl:

<?php
$url = 'http://www.urltowebsite.com/Default.aspx';
$fields = array('__VIEWSTATE' => 'averylongvar',
                '__EVENTVALIDATION' => 'anotherverylongvar',
                'A few' => 'other variables');

$fields_string = http_build_query($fields);

$curl = curl_init($url);

curl_setopt_array
(
    $curl,
    array
    (
        CURLOPT_RETURNTRANSFER  =>    true,
        CURLOPT_SSL_VERIFYPEER  =>    0,  //    Not supported in PHP
        CURLOPT_SSL_VERIFYHOST  =>    0,  //        at this time.
        CURLOPT_HTTPHEADER      =>
            array
            (
                'Content-type: application/x-www-form-urlencoded; charset=utf-8',
                'Set-Cookie: ASP.NET_SessionId='.uniqid().'; path: /; HttpOnly'
            ),
        CURLOPT_POST            =>    true,
        CURLOPT_POSTFIELDS      =>    $fields_string,
        CURLOPT_FOLLOWLOCATION => 1
    )
);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
?>

Запрошены следующие заголовки:

Заголовки запроса

  • Accept: приложение / XML, приложение / XHTML + XML, текст / HTML; д = 0,9, текст / обычный; д = 0,8, изображение / PNG, * 1 028 * / ; д = 0,5
  • Content-Type: применение / х-WWW-форм-urlencoded
  • Пользователь-агент: Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_6_4; ан-нас) AppleWebKit / 533.18.1 (KHTML, как Gecko) Версия / 5.0.2 Safari / 533.18.5

Данные формы

  • много полей формы

Заголовки ответа

  • Cache-Control: частный
  • Content-Length: 30168
  • Content-Type: Текст / html; кодировка = UTF-8
  • Дата: четверг, 09 сентября 2010 г. 17:22:29 GMT
  • Сервер: Microsoft-IIS / 6.0
  • X-Сеть САШ-версия: 2.0.50727
  • X-Powered-By: ASP.NET

Когда я изучаю заголовки сценария CURL, который я написал, каким-то образом не генерируется запрос данных формы. Ни один из методов запроса не установлен на POST. Вот где мне кажется, что дела идут плохо, но не знаю.

Любая помощь приветствуется !!!

РЕДАКТИРОВАТЬ: я забыл упомянуть, что результатом очистки является пользовательская страница с истекшим сроком действия сессии удаленного сайта.

Ответы [ 3 ]

1 голос
/ 07 июля 2011

Поскольку __VIEWSTATE и __EVENTVALIDATION являются массивами из 64 символов, я использовал urlencode() для этих полей:

$fields = array('__VIEWSTATE' => urlencode( $averylongvar ),
                '__EVENTVALIDATION' => urlencode( $anotherverylongvar),
                'A few' => 'other variables');

И у меня нормально работало.

0 голосов
/ 10 сентября 2010

Я предполагаю, что сайт требует рендеринга в браузере. Вы пытались использовать такой инструмент, как iMacros или Watir ?

0 голосов
/ 09 сентября 2010

Поскольку VIEWSTATE содержит состояние страницы в конкретной ситуации (и все это состояние закодировано в большую, явно грязную строку), вы не можете быть уверены, что параметр, который вы очищаете, может быть таким же для вашей "насмешки""request (я совершенно уверен, что это не может быть тем же самым;)).

Если вам действительно нужно иметь дело с параметрами VIEWSTATE и EVENTVALIDATION, я советую придерживаться другого подхода, то есть очистки содержимого с помощью Selenium.или с библиотекой, похожей на HtmlUnit (но, к сожалению, я не знаю, есть ли что-то подобное в PHP).

...