【问题标题】:how to get raw post data of a form in a remote website using php如何使用php在远程网站中获取表单的原始帖子数据
【发布时间】:2017-11-20 04:41:16
【问题描述】:

我想从我的远程网站登录。因此,我使用 cURL 来实现这一点,并使用以下代码成功:

function login($url,$data)
{
   $fp = fopen("cookie.txt", "w");
   fclose($fp);
   $login = curl_init();
   curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");
   curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
   curl_setopt($login, CURLOPT_TIMEOUT, 40000);
   curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
   curl_setopt($login, CURLOPT_URL, $url);
   curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
   curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
   curl_setopt($login, CURLOPT_POST, TRUE);
   curl_setopt($login, CURLOPT_POSTFIELDS, $data);
   ob_start();
   return curl_exec ($login);
   ob_end_clean();
   curl_close ($login);
   unset($login);
}

因此,为了发布数据,我使用了网站中表单的原始数据。当我尝试直接登录远程网站 (http://vce.ac.in) 时,我设法从 Edge 中的开发人员工具中获得。Here is the screenshot of raw POST data

问题在于参数 viewstate、validation、viewstategenerator 的值每 24 小时都在变化。

因此,如果 PHP 中有一种方法可以获取网站的原始 POST 数据,我可以更新那些正在变化的原始数据参数的值。

【问题讨论】:

  • 您可以获取表单的 html 并从原始 html 解析所有输入和值...
  • 你想在这个网站上强行输入密码吗?
  • 不,我有一对有效的用户名和密码。但问题是参数 viewstate、validation、viewstategenerator 每 24 小时更改一次(请参阅我附上的屏幕截图)

标签: php curl post cookies login


【解决方案1】:

用一个简单的 PHP DOM 解析它们

// get simple_html_dom.php from : https://netix.dl.sourceforge.net/project/simplehtmldom/simple_html_dom.php
require_once('simple_html_dom.php');

function login($url, $data){

   $html = file_get_html( $url );

   foreach ($html->find('input') as $input){
       # echo "INPUTDOM". print_r($input);
       if ($input->attr['name']=="__VIEWSTATE"){
           //__VIEWSTATE
           echo "__VIEWSTATE: {$input->attr['value']}\n";
           $form_data['__VIEWSTATE'] = $input->attr['value'];

       } elseif ($input->attr['name']=="__VIEWSTATEGENERATOR"){
           //__VIEWSTATEGENERATOR
           echo "__VIEWSTATEGENERATOR: {$input->attr['value']}\n";
           $form_data['__VIEWSTATEGENERATOR'] = $input->attr['value'];

       } elseif ($input->attr['name']=="__VIEWSTATE"){
           //__EVENTVALIDATION
           echo "__VIEWSTATE: {$input->attr['value']}\n";
           $form_data['__EVENTVALIDATION'] = $input->attr['value'];

       }
   };

   return $form_data;

}


echo login('http://vce.ac.in/index.aspx',['txtLoginID'=> 'user', 'txtPWD'=> 'password'] );   

【讨论】:

    猜你喜欢
    • 2010-11-24
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多