为了账号安全,请及时绑定邮箱和手机立即绑定

php CURL以编程方式登录站点

php CURL以编程方式登录站点

PHP
宝慕林4294392 2023-03-04 11:18:09
我正在尝试使用 PHP CURL 编写登录函数以在以下站点中执行登录: https: //partners.mrfavorit.com/。当我查看网络请求时,平台似乎在 .NET 上。首先,我发出一个 GET 请求来收集 cookie:$ch = curl_init();curl_setopt_array( $ch, array(  CURLOPT_URL => 'https://partners.mrfavorit.com/',  CURLOPT_RETURNTRANSFER => true,  CURLOPT_ENCODING => "",  CURLOPT_MAXREDIRS => 10,  CURLOPT_TIMEOUT => 30,  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,  CURLOPT_CUSTOMREQUEST => 'GET',  CURLOPT_HEADER => true,));$a = curl_exec($ch);preg_match_all('|Set-Cookie: (.*);|U', $a, $results);$cookies2 = implode(';', $results[1]);然后我将带有登录凭据的 POST 发送到相同的 URL,但它不起作用,请求返回 200 和登录页面 html 代码。curl_setopt_array($ch, array(  CURLOPT_URL => "https://partners.mrfavorit.com/?&txtUserName=myusername&txtPassword=mypassword123",  CURLOPT_RETURNTRANSFER => true,  CURLOPT_ENCODING => "",  CURLOPT_MAXREDIRS => 10,  CURLOPT_TIMEOUT => 0,  CURLOPT_FOLLOWLOCATION => true,  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,  CURLOPT_CUSTOMREQUEST => "POST",  CURLOPT_HEADER => true,  CURLOPT_POSTFIELDS =>'',  CURLOPT_HTTPHEADER => array(    "Content-Type: application/json",    "Cookie: ".$cookies2  ),));$r2 = curl_exec($ch);print_r($r2);失败的原因可能是什么?这样做的最终目的是从系统内部的报表中收集数据。
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

我成功了。诀窍是向登录页面发出初始 GET 请求,并获取 cookie 以及"__VIEWSTATE""__VIEWSTATEGENERATOR","__EVENTVALIDATION"动态字段。然后使用这些字段 POST 到相同的 URL。

之后,我不得不发出两个 POST 请求,/dailyreport.aspx同时从第一个获取视图状态和其余变量,并将它们传递给第二个。只有这样我才能检索返回的 HTML 表。


查看完整回答
反对 回复 2023-03-04
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

你应该把你的POST数据放在里面CURLOPT_POSTFIELDS =>'',并且CURLOPT_URL应该指向登录 URL。您这样做的方式是使用 GET 请求请求站点。


$post = ['txtUserName'=>'myUserName','txtPassword'=>'myPassword123'];    

curl_setopt_array($ch, array(

      CURLOPT_URL => "https://partners.mrfavorit.com/",

      CURLOPT_RETURNTRANSFER => true,

      CURLOPT_ENCODING => "",

      CURLOPT_MAXREDIRS => 10,

      CURLOPT_TIMEOUT => 0,

      CURLOPT_FOLLOWLOCATION => true,

      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,

      CURLOPT_CUSTOMREQUEST => "POST",

      CURLOPT_HEADER => true,

      CURLOPT_POSTFIELDS =>http_build_query($post),

      CURLOPT_HTTPHEADER => array(

        "Content-Type: application/json",

        "Cookie: ".$cookies2

      ),

    ));


    $r2 = curl_exec($ch);

    print_r($r2);

看到这个PHP + curl,HTTP POST 示例代码了吗?

[编辑] 添加http_build_query()$post将生成一个application/x-www-form-urlencodedHTTP 请求

请参阅有关使用 curl_setopt 发布数组的评论


查看完整回答
反对 回复 2023-03-04
  • 2 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号