我想從curl中使用curl在php中的asp.net頁面中調用__doPostback
javascript函數。cURL發佈數據到asp.net頁面
我瞭解到,這可以通過使用適當的參數向asp.net頁面發佈發佈請求來完成。
所以捲曲,
- 我做一個GET請求/只使用
file_get_contents
檢索初始頁面。 - 由此,我提取了
__VIEWSTATE
和__EVENTVALIDATION
的值。
到目前爲止一切似乎都沒問題。
現在,我明白我們需要使用cURL發出請求,並且需要__VIEWSTATE
和其他參數。 (asp.net窗體中的字段值)
我無法正確構建CURLOPT_POSTFIELDS
。
舉例來說,我想這一點,
而且使用SETOPT爲CURLOPT_POSTFIELDS
之前,我做的,
urlencode ($postoptions1.$postoptions2.$otherparams)
這是行不通的。提交結果未顯示,這意味着在我的發佈請求中未找到所需的參數__VIEWSTATE
。
如果我更改參數的順序並將__VIEWSTATE
作爲第一個參數,將顯示結果頁面,但其他參數值不符合。
我認爲我編碼參數的方式存在一些問題。
請告訴我如何構建發佈到asp.net頁面的請求的參數。
謝謝。
--Edited--
下面是完整的代碼: $ resultsPerPage = '10' ; $ url =「www.example.com」; // url changed
$ curl_connection = curl_init($ url); 功能sendCurl($ curl_connection,$網址,$參數,可以$ 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);
這並沒有幫助我的情況。下面是輸出:__VIEWSTATE = 0k1ruWH%2BzSohS0G0kOy6JhOZxeadZDkpmU9syivmmwxj0FfA9qHwJSDDG%2Bf2URv%2FGqnsfcIbapMhbqUg%3D%3D&__ EVENTVALIDATION = JV9xlRMggTR14sqkFT0zMJ0aO5LSOp41vy4kIKnCMwIoNnh1SiyeMUgcbb9J1jec4S8Yr3s%2FakWbjbgsLZLa081BYSObgoLU17lL1YEaCLj0dKhrduupil4RSqqURfGbj%2FIpfqtjsD%2BHxC2ZcfddlJFhMZdh&ctl00_ToolkitScriptManager1_HiddenField =&ctl00%24ContentPlaceHolder1%24name =&ctl00%24ContentPlaceHolder1%24type =&ctl00%24ContentPlaceHolder1%大小= 10&ctl00%24ContentPlaceHolder1%24btnSearch =搜索&__ EVENTTARGET =&__ EVENTARGUMENT =。我收到一個找不到頁面。 – 2011-03-22 03:22:55
如果返回404頁面未找到,那麼您使用的URL可能不是實際的資源。但是,如果沒有更多的上下文,我將無法分辨。 – 2011-03-22 03:29:12
這個查詢字符串作品(我不明白找不到頁面),但只有第一個參數被認爲是:__VIEWSTATE%252FgRlmFUjXphs2ES6bzvyvKWm62AcGQ7cyD%252F1aAQuioHYWQ%253D%253D%26__EVENTTARGET%3Dctl00%24ContentPlaceHolder1%24gvCrossRef%26__EVENTARGUMENT%3DPage%242%26ctl00%2524ContentPlaceHolder1%2524txtSearch %3DExar%26ctl00%2524ContentPlaceHolder1%2524name%3D%26ctl00%2524ContentPlaceHolder1%2524ddltype%3D%26ctl00%2524ContentPlaceHolder1%2524size%3D10%26ctl00%2524ContentPlaceHolder1%2524btnSearch%3DSearch%26ctl00_ToolkitScriptManager1_HiddenField%3D – 2011-03-22 03:46:46