Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php cURL将数据发布到asp.net页面_Php_Asp.net_Curl_Viewstate - Fatal编程技术网

Php cURL将数据发布到asp.net页面

Php cURL将数据发布到asp.net页面,php,asp.net,curl,viewstate,Php,Asp.net,Curl,Viewstate,我试图使用curl从php调用asp.net页面中的\uuu doPostbackjavascript函数 我了解到,这可以通过使用适当的参数向asp.net页面发出post请求来实现 所以在卷曲中 我发出了一个get请求/只需使用file\u get\u contents检索初始页面 从中,我提取了\uuu VIEWSTATE和\uu EVENTVALIDATION的值 到目前为止,一切似乎都很好 现在,我了解到我们需要使用cURL和\uuu VIEWSTATE以及其他所需参数发出post请求

我试图使用curl从php调用asp.net页面中的
\uuu doPostback
javascript函数

我了解到,这可以通过使用适当的参数向asp.net页面发出post请求来实现

所以在卷曲中

  • 我发出了一个get请求/只需使用
    file\u get\u contents
    检索初始页面
  • 从中,我提取了
    \uuu VIEWSTATE
    \uu EVENTVALIDATION
    的值
  • 到目前为止,一切似乎都很好

    现在,我了解到我们需要使用cURL和
    \uuu VIEWSTATE
    以及其他所需参数发出post请求。(asp.net表单中的字段值)

    我无法正确构造
    CURLOPT_POSTFIELDS

    比如说我在试这个,

    $postoptions1='__EVENTTARGET='.('ctl00$ContentPlaceHolder1$gRef').'&__EVENTARGUMENT='.('$2');
    $postoptions2 =  '&__VIEWSTATE='.urlencode($viewState) ;
    $otherparams = '&ctl00$ContentPlaceHolder1$ddlName=Abc';
    
    在使用setopt for
    CURLOPT_POSTFIELDS
    之前,我要

    urlencode ($postoptions1.$postoptions2.$otherparams)
    
    这是行不通的。未显示提交结果,这意味着在我的post请求中未找到所需的参数
    \u VIEWSTATE

    如果我更改参数的顺序并将
    \uuu VIEWSTATE
    作为第一个参数,则会显示结果页面,但不接受其他参数值

    我认为我对参数的编码方式存在一些问题

    请告诉我如何为asp.net页面的post请求构造参数

    谢谢

    --编辑--

    以下是完整的代码: $resultsPerPage='10'; $url=“www.example.com”;//url已更改

    $curl\u connection=curl\u init($url); 函数sendCurl($curl\u connection,$url,$params,$isPost=false){

    $response1=sendCurl($curl\u connection,$url',,false);
    $viewState=getVStateContent($response1);
    $eventValidation=getEventValidationContent($response1);
    $simpleParams='&$VIEWSTATE='.$VIEWSTATE.&ctl00$ContentPlaceholder 1$ddlManuf=&ctl00$ContentPlaceholder 1$ddlCrossType=&ctl00$ContentPlaceholder 1$ddlPageSize='.$resultsPerPage.&ctl00$ContentPlaceholder 1$btnSearch=Search&ctl00$ToolkitScriptManager1\u隐藏字段=&&ctl00$ContentPlaceholder=& //第二篇文章-用于提交搜索表单
    $response2=sendCurl($curl\u connection,$url,$simpleParams,true);
    ----**

    您想要的是,它将数组格式化为正确的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$contentPlaceholder 1$ddlName应该是什么?

    不要对将参数链接在一起的符号和(&)进行URL编码,只对键和值(符号两边的内容)进行编码.

    这对我的情况没有帮助。以下是输出:uuu VIEWSTATE=0k1ruWH%2BzSOHSG0KOY6JHOZADKpmu9SYIVMMWxJ0FFA9QHWJddg%2Bf2URv%2FGqnsfcIbapMhbqUg%3D%3D和uu EVENTVALIDATION=JV9XLRMGGTR14SQKFS8ZMJ0ZMJ0AO5LSOP41VY4KIKNc1IYMBB9JEC4YR3S%2FAKBKWfKJ1FKGJ0KJ0KJ0KJ0KJ0KJ0KJ0KJ0KJ0KJ0KJ0KJ0J0J0J0J0J0KJ0J0J0J0J0J0J0J0J0J0J0J0J0J0J0J0J0KoolkitScriptManager1\u HiddenField=&ctl00%24contentplaceholder 1%24name=&ctl00%24contentplaceholder 1%24type=&ctl00%24contentplaceholder 1%size=10&ctl00%24contentplaceholder%24btnSearch=Search&\uuuuuuu EVENTTARGET=&uuuuuuu EVENTARGUMENT=。我得到一个找不到的页面。如果返回了404页面,那么您使用的URL可能不是实际的资源。我将但是,如果没有更多上下文,则无法判断。此查询字符串有效(我无法获取未找到的页面),但只考虑第一个参数:uu VIEWSTATE%252fgrlmfujxphs2es6bzvvyvkwm62acgq7cyd%252f1aquiohywq%253D%253D%253D%26_u事件目标%3Dctl00%24ContentPlaceHolder1%24gvCrossRef%26_u事件参数%3DPage%242%26ctl00%2524ContentPlaceHolder1%2524c%2524ctl00%2524ContentPlaceHolder1%3D%26ctl00%2524ContentPlaceholder 1%2524size%3D10%26ctl00%2524ContentPlaceholder 1%2524btnSearch%3DSearch%26ctl00\u ToolkitScriptManager1\u HiddenField%3您是否在运行
    http\u build\u query
    后执行
    urlencode
    ?因为您不应该这样做。更新了我的答案以反映整个事情的样子。我尝试了这个方法。查询字符串看起来像如下所示:视图状态=%2FM2fyvIXCicvzPxQrhT%2BVHnkc1NnV609%2FMiR97D%2Ft7%2fcjn22zlo2rieabwd25a%2Fc%2bgahtefb4lmas5czm2lj7kasn7qmlk1xgektfodhztnlzvd4asrp5qoowvkpoydsh2mqjyfv8oyhr5lkj53zykek0pw1pw1n5stlia5y1%2f1cqgawlac&ctlu工具脚本管理器HiddenField=&24ctlu%24ctl1%24ctl00%24内容占位符类型ContentPlaceholder 1%24size=10&ctl00%24ContentPlaceholder 1%24btnSearch=Search&&\uuuu事件目标=&\uuuu事件参数=。我获取未找到页面错误。
    $params = array(
        '__EVENTTARGET' => 'ctl00$ContentPlaceHolder1$gRef',
        '__EVENTARGUMENT' => '$2',
        '__VIEWSTATE' => $viewState,
        'ctl00$ContentPlaceHolder1$ddlName' => 'Abc'
    );
    
    curl_setopt($curlHandler, CURLOPT_POSTFIELDS, http_build_query($params));