Данные cURL-сообщения на страницу asp.net

Я пытаюсь вызвать __doPostback javascript __doPostback на странице asp.net с php, используя curl.

Я узнал, что это можно сделать, отправив запрос на страницу asp.net с соответствующими параметрами.

Таким образом,

  1. Я делаю запрос на получение / просто использую file_get_contents для извлечения начальной страницы.
  2. Из этого я извлекаю значения для __VIEWSTATE и __EVENTVALIDATION .

Пока все выглядит нормально.

Теперь я понимаю, что нам нужно сделать почтовый запрос с использованием cURL с __VIEWSTATE и другими необходимыми параметрами. (значения для полей, присутствующих в форме asp.net)

Я не CURLOPT_POSTFIELDS правильно построить CURLOPT_POSTFIELDS .

Например, я пробую это,

 $postoptions1='__EVENTTARGET='.('ctl00$ContentPlaceHolder1$gRef').'&__EVENTARGUMENT='.('$2'); $postoptions2 = '&__VIEWSTATE='.urlencode($viewState) ; $otherparams = '&ctl00$ContentPlaceHolder1$ddlName=Abc'; 

И перед использованием setopt для CURLOPT_POSTFIELDS , я делаю,

 urlencode ($postoptions1.$postoptions2.$otherparams) 

Это не работает. Представленные результаты не отображаются, что означает, что требуемый параметр __VIEWSTATE не найден в моем почтовом запросе.

Если я изменил порядок параметров и __VIEWSTATE в качестве первого параметра, __VIEWSTATE страница результатов, но другие значения параметров не будут соблюдены.

Я думаю, что есть некоторые проблемы с тем, как я кодирую параметры.

Скажите, пожалуйста, как создать параметры для почтового запроса на странице asp.net.

Благодарю.

–Edited–

Вот полный код: $ resultsPerPage = '10 '; $ url = "www.example.com"; // URL изменен

$ curl_connection = curl_init ($ url); функция sendCurl ($ curl_connection, $ url, $ params, $ isPost = false) {

 //$post_string = $params; $post_string = http_build_query($params); //$post_string = build_query_string($params); //$post_string = urlencode($params); echo 'After Encode'.$post_string; $cookie="/cookie.txt"; //set options curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 300); 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_HEADER, 0); // don't return headers curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl_connection,CURLOPT_REFERER, $url); if($isPost) { curl_setopt ($curl_connection, CURLOPT_POST, true); //set data to be posted curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); curl_setopt($curl_connection,CURLOPT_COOKIEJAR,$cookie); } else { curl_setopt($curl_connection,CURLOPT_COOKIEFILE,$cookie); } $response1 = curl_exec($curl_connection); if($response1 === false) { echo 'Curl error: ' . curl_error($curl_connection); } else { echo 'Operation completed without any errors'; } return $response1; } **// First time, get request to asp.net page 

$response1 = sendCurl($curl_connection,$url,'',false);
$viewState=getVStateContent($response1);
$eventValidation =getEventValidationContent($response1);
$simpleParams = '&__VIEWSTATE='.$viewState.'&ctl00$ContentPlaceHolder1$ddlManuf=&ctl00$ContentPlaceHolder1$ddlCrossType=&ctl00$ContentPlaceHolder1$ddlPageSize='.$resultsPerPage.'&ctl00$ContentPlaceHolder1$btnSearch=Search&ctl00_ToolkitScriptManager1_HiddenField=&__EVENTTARGET=&__EVENTARGUMENT=';
// Second post - for submitting the search form
$response2= sendCurl($curl_connection,$url,$simpleParams,true);
—- **

    Вы хотите http_build_query , который будет форматировать массив как надлежащие параметры HTTP.

    Изменить : Чтобы выяснить, как это должно выглядеть:

     $params = array( '__EVENTTARGET' => 'ctl00$ContentPlaceHolder1$gRef', '__EVENTARGUMENT' => '$2', '__VIEWSTATE' => $viewState, 'ctl00$ContentPlaceHolder1$ddlName' => 'Abc' ); curl_setopt($curlHandler, CURLOPT_POSTFIELDS, http_build_query($params)); 

    Кроме того, что такое ctl00$ContentPlaceHolder1$ddlName ?

    Не используйте urlencode () амперсанды (&), связывающие параметры вместе, только клавиши и значения (материал по обе стороны от амперсандов).