[Мертвый] Как успешно выполнить POST на старый сайт ASP.NET с помощью асинхронной обратной передачи

[Обновить] К сожалению, мне так и не удалось решить эту проблему. Однако ниже есть несколько интересных ответов, которые стоит попробовать другим читателям, которые хотят сделать что-то подобное.

Я пытаюсь проанализировать данные с сайта, на котором работает ASP.NET. На этом сайте есть страница входа, которую я успешно прошел (используя законную учетную запись) и сохранил файл cookie, но когда я углубляюсь в сайт, мне нужно перемещаться по нему, обновляя UpdatePanels с помощью асинхронных обратных передач. UpdatePanels содержат нужные мне данные.

Я пытаюсь сделать все это с помощью PHP и curl. Могу успешно загрузить начальную страницу. Когда я отправляю POST на свою целевую страницу со всеми соответствующими данными (полученными через плагин Firefox Tamper Data), повторяемый результат, возвращаемый из curl, всегда очищает мою страницу. Как правило, повторение результата просто распечатывает (или выводит некоторую ошибку / искаженный текст) дальше по странице. curl_error () ничего не распечатывает, поэтому что-то не так с тем, что мне возвращают.

Я не понимаю, что делать дальше. Скажите, пожалуйста, если: а) вы знаете, какую ошибку я получаю, б) если это вообще возможно только с PHP, и в) если, наоборот, мне нужно отмахнуться от javascript для взаимодействия с UpdatePanels ASP.NET .

$uri = "TARGETURL";
$cl=curl_init();
curl_setopt($cl, CURLOPT_URL, $uri);
curl_setopt($cl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0');
curl_setopt($cl, CURLOPT_COOKIEFILE, "/tmp/cookie2.txt");
curl_setopt($cl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cl, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($cl, CURLOPT_POST, 1);
$postdata=array(

    "__VIEWSTATE" => $viewstate,
    "OTHER DATA" => "asdfkljsddflkjshdjf",
    "__ASYNCPOST" => "true",
);
echo "<PRE>";
print_r($postdata);
echo "</PRE>";
curl_setopt ($cl, CURLOPT_POSTFIELDS, $postdata);
$result = curl_exec($cl); // execute the curl command
echo $result;

Вот заголовок и тело, которые я получаю от сервера (отправленное мне по электронной почте, чтобы избежать очистки страницы с помощью оператора echo):

HEADER RESPONSE: 
HTTP/1.1 100 Continue 
HTTP/1.1 200 OK 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: text/plain; charset=utf-8
Expires: -1 
Server: Microsoft-IIS/7.5 
X-Content-Type-Options: nosniff
Set-Cookie: culture=en-US; expires=Tue, 27-Nov-2012 20:02:37 GMT; path=/ 
X-Powered-By: ASP.NET Date: Mon, 28 Nov 2011 20:02:37 GMT
Content-Length: 112 
BODY RESPONSE: 
69|dataItem||<script type="text/javascript">window.location="about:blank"</script>|11|pageRedirect||/Error.aspx|

Это объясняет проблему, которую я получаю с переходом страницы пустой (javascript перенаправляет вывод моего браузера). Это также указывает на то, что проблема не в заголовке, поскольку из-за неверных значений заголовка я получаю ошибку HTTP.

8
задан David 14 December 2012 в 00:23
поделиться