cURL发布数据到asp.net页面
我想从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);
你想要的是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()和(&)链接在一起的参数,只是键值&值(&符号两边的东西)。
我试过了。查询字符串看起来是这样的:__VIEWSTATE =%2FM2fyvIXCicvzPxQrhT%2BVHnkc1NnV609%2FMiR97D%2Ft7%2FCJN22ZLO2E3rieAbWd25A%2FC%2Bgaahtefb4LMAs5cZm2Lj7KaSn7qmlk1XgeKTFodhzTnLzvd4aSRP5GqOEuWVKPODsh2SMQtJYfLKfvUFs8oYhr5LKJ53zXyEKcQ0PW1n5StLIA5Y1%2FgAwlAc&ctl00_ToolkitScriptManager1_HiddenField = ctl00%24ContentPlaceHolder1%24name = ctl00%24ContentPlaceHolder1%24type = ctl00%24ContentPlaceHolder1%24size = 10 ctl00%24ContentPlaceHolder1%24btnSearch =搜索&__ EVENTTARGET =&__ EVENTARGUMENT =。我得到页面未找到错误。 – 2011-03-22 04:00:34
这并没有帮助我的情况。下面是输出:__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