簡體   English   中英

php CURL 以編程方式登錄站點

[英]php CURL login in site programatically

I'm trying to write a login function using PHP CURL to perform a login in the following site: https://partners.mrfavorit.com/ . 當我查看網絡請求時,似乎平台在 .NET 上。

首先,我發出一個 GET 請求來收集 cookies:

$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);

失敗的原因可能是什么?

這樣做的最終目的是從系統內部的報告表中收集數據。

我讓它工作了。 訣竅是向登錄頁面發出初始 GET 請求,並獲取 cookies 以及"__VIEWSTATE""__VIEWSTATEGENERATOR""__EVENTVALIDATION"動態字段。 然后使用這些字段 POST 到相同的 URL。

之后,我必須向/dailyreport.aspx發出兩個 POST 請求,同時從第一個獲取視圖 state 和 rest 變量,並將它們傳遞給第二個。 只有這樣我才能檢索返回的 HTML 表。

您應該將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-urlencoded HTTP 請求

請參閱有關使用 curl_setopt 發布數組的評論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM