[英]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.