php – cURL将数据发布到asp.net页面
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – cURL将数据发布到asp.net页面,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3359字,纯文字阅读大概需要5分钟。
内容图文
![php – cURL将数据发布到asp.net页面](/upload/InfoBanner/zyjiaocheng/769/d3b0b23a01ad4844ad85c72fb0206239.jpg)
我试图使用curl从php中调用asp.net页面中的__doPostback javascript函数.
我了解到这可以通过使用适当的参数向asp.net页面发布请求来完成.
所以在卷曲中,
>我发出get请求/只需使用file_get_contents来检索初始页面.
>从中,我提取__VIEWSTATE和__EVENTVALIDATION的值.
一切似乎都好.
现在,我知道我们需要使用带有__VIEWSTATE的cURL和其他所需参数来发布请求. (asp.net表单中的字段值)
我无法正确构造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作为第一个参数,则会显示结果页面,但不会遵循其他参数值.
我认为我对参数进行编码的方式存在一些问题.
请告诉我如何构建对asp.net页面的post请求的参数.
谢谢.
–Edited–
这是完整的代码:
$resultsPerPage = ’10’ ;
$url =“www.example.com”; //网址已更改
$curl_connection = curl_init($url);
function 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($响应1);
$eventValidation = getEventValidationContent($response1);
$simpleParams =’& __ VIEWSTATE =’.$viewState.’& ctl00 $ContentPlaceHolder1 $ddlManuf =& ctl00 $ContentPlaceHolder1 $ddlCrossType =& ctl00 $ContentPlaceHolder1 $ddlPageSize =’.$resultsPerPage.’& ctl00 $ContentPlaceHolder1 $btnSearch =搜索&安培; ctl00_ToolkitScriptManager1_HiddenField =安培; __ EVENTTARGET =安培; __ EVENTARGUMENT =’;
//第二篇文章 – 用于提交搜索表单
$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应该是什么?
内容总结
以上是互联网集市为您收集整理的php – cURL将数据发布到asp.net页面全部内容,希望文章能够帮你解决php – cURL将数据发布到asp.net页面所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。