Я пытаюсь вызвать __doPostback javascript __doPostback на странице asp.net с php, используя curl. 
Я узнал, что это можно сделать, отправив запрос на страницу asp.net с соответствующими параметрами.
Таким образом,
file_get_contents для извлечения начальной страницы. __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 () амперсанды (&), связывающие параметры вместе, только клавиши и значения (материал по обе стороны от амперсандов).