php curl - публикация значения представления в asp.net - PullRequest
8 голосов
/ 16 июля 2010

У меня есть следующий код для входа в приложение внешнего сайта (приложение asp.net) из формы входа в локальный сайт (написано в php):

<?php
$curl_connection = curl_init('www.external.com/login.aspx');

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT,
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

// Post data array
$post_data['LoginControl$UserName'] = 'ExampleUName';
$post_data['LoginControl$Password'] = 'ExamplePWord';

// Add form fields into an array to get ready to post
foreach ($post_data as $key => $value) 
  {
$post_items[] = $key . '=' . $value;
  }
$post_string = implode ('&', $post_items);

// Tell cURL which string to post
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);

// Execute and post
$result = curl_exec($curl_connection);
?>

Меня перенаправляют на форму входа на внешний сайт, а не на приложение, вошедшее в систему. Мне кажется, проблема в том, что мне нужно передать значения viewstate, но я не уверен, что делать что?

У меня нет контроля над внешним приложением. Но мы хотим, чтобы пользователи могли входить в приложение через наш веб-сайт, поддерживать брендинг и т. Д.

Недавно я опубликовал несколько других тем об использовании php cURL, но сейчас я нахожусь на этапе, когда я думаю, что состояние представления является проблемой ...

Спасибо, Марк.

Ответы [ 3 ]

4 голосов
/ 04 октября 2010

Похоже, что это реальная проблема при попытке очистки страниц asp.net.

Страницы содержат скрытое поле с именем "__VIEWSTATE", которое содержит закодированный в base64 набор значений, содержащий некоторые или всесостояния страницы, когда страница была отправлена.Обычно он также содержит SHA1 состояния просмотра.

Это означает, что ваше сообщение должно содержать все в _VIEWSTATE, иначе произойдет сбой.

Мне удалось опубликовать простую страницу входа, которая имеет только 2 поля, но не более сложную страницу, на которой автор решил поместить все состояние страницы в состояние просмотра.

Какпока я не смог найти решение.

2 голосов
/ 16 июля 2010

Изменение:

curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

На:

curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, false);

Вам также необходимо настроить файл cookie, посмотрите на CURLOPT_COOKIEFILE

CURLOPT_COOKIEFILE:

Имя файла, содержащего данные cookie.Файл cookie может иметь формат Netscape или просто заголовки в стиле HTTP, выгруженные в файл.

CURLOPT_COOKIE:

Содержимое заголовка «Cookie:», которое будет использоваться взапрос HTTP.Обратите внимание, что несколько файлов cookie разделяются точкой с запятой, за которой следует пробел (например, «fruit = apple; color = red»)

CURLOPT_COOKIEJAR:

имя файла для сохранения всехвнутренние cookie-файлы, когда соединение закрывается.

@ см. http://www.php.net/manual/en/function.curl-setopt.php

curl_setopt($curl_connection, CURLOPT_COOKIEFILE, 'cookiefile.txt'); 
curl_setopt($curl_connection, CURLOPT_COOKIEJAR, 'cookiefile.txt'); 
0 голосов
/ 06 мая 2018

Не ожидайте, что это сработает без кодирования строки __VIEWSTATE в php с использованием

rawurlencode ($ ViewState);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...