[英]https request to another domain with redirect using php
我在一個域上有自動登錄鏈接 - 該域名用於授權:
https://example.com/api/login/{key}/{username}
在關注此鏈接后,用戶將被重定向到控制面板:
https://example.com
如果出現問題 - 用戶重定向到
https://example.com/login page.
在另一個域example2.com
用戶有計費面板,並且鏈接https://example.com/api/login/{key}/{username}
。
所以我需要檢查一下example2.com
到example.com
這樣:
$url = https://example.com/api/login/{key}/{username};
if function-to-check-autologin($url) == "true" {
//do something
}
我的搜索結果是curl,但我不能自己配置請求。
我怎么能這樣做? 卷曲或其他方式?
您還沒有解釋“自動登錄”是什么,或者它是如何工作的。 您的所有域名都是“example.com”,因此它們都是相同的域名。 當然,你不容易讓人們理解你的問題。 我會試着說出我對它的理解。
您已經有一個用戶登錄到一個互聯網域,並且您想將它們重定向到第二個域,他們應該保持登錄狀態。
有很多方法可以做到這一點,但它們都取決於某些條件。
如果您使用標准的http登錄方法,則可以使用以下方法重定向到第二個域:
由於您表明您在兩個網站上使用的SSL證書都是合理安全的。 即使您不共享數據庫,這也將起作用。
如果兩個域都使用相同的數據庫,則可以將加密鏈接切換到用戶的登錄會話。 這就是我正常做的方式。 我在我的數據庫中保存會話,每個會話都有一個ID。 我加密,任何好方法都會這樣做,並將其發送到我解密它的第二個域,如下所示:
https://example.com?key=DgGyC28Sw3eQFvY9hz2dBkfmCa5zMgV6nN4Jj8VeD76chf7
當然,會話本身應該告訴您用戶是否已登錄。確保您的加密方法是安全的。
在這兩種情況下,如果URL落入壞人之手,登錄可能會被偽造。 這就是使用SSL很重要的原因,但仍存在一些風險。
雖然你的問題很模糊,但我會給你一些線索。
首先,除非您要處理對等證書,否則必須將CURLOPT_SSL_VERIFYPEER
選項設置為false
。
此外,您必須告訴CURL處理重定向。 這假設您設置了CURLOPT_FOLLOWLOCATION
選項以及CURLOPT_MAXREDIRS
和CURLOPT_AUTOREFERER
。
為了使用請求發送POST數據,您必須將CURLOPT_POST
選項設置為true
,將CURLOPT_POSTFIELDS
為POST數據或url編碼的字符串數組。
完成CURL請求后,您可以通過curl_getinfo
函數了解有關它的所有信息。 使用CURLINFO_REDIRECT_COUNT
作為第二個參數調用它將給出重定向的數量,並且CURLINFO_EFFECTIVE_URL
- 最后一個有效的URL。
所以代碼可能如下所示:
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $url,
CURLOPT_NOBODY => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_MAXREDIRS => 1,
CURLOPT_AUTOREFERER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data_array,
));
$response = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_REDIRECT_COUNT) == 1 && curl_getinfo($ch, CURLINFO_EFFECTIVE_URL) == $sample_redirect_url)
echo 'OK';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.