我試圖通過$ _SERVER ['HTTP_REFERER'](通過cURL設置)從一個服務器傳遞一個密鑰到另一個服務器,然後處理一些POST數據併發送一個XML回檔。我將密鑰存儲在兩臺服務器上的相同文件中(通過cron job SCP進行輪換),但是當我在接收端讀取密鑰並與引用程序進行比較時,它每次都會失敗,並將418丟回給我。將HTTP_REFERER與從文件讀取的值進行比較失敗
如果我使用if($refkey = "mykeyhere")
而不是if($refkey = $key)
它可以正常工作,但顯然他們關鍵的硬編碼在這裏不起作用 - 我需要能夠從文件中讀取它。
我試過使用strstr()
,對(string)$key
做一個演員,但是兩個返回字符串gettype()
所以它應該工作。 關鍵是在$ _SERVER ['HTTP_REFERER']中正確發送,並正確地從接收端的文件中讀取,我已經echo'd兩者,它們是相同的。有誰知道爲什麼比較會失敗,我是在做一些愚蠢的事,顯然是錯的?謝謝。
捲曲請求構建代碼:
$file = "key";
$fh = fopen($file, 'r');
$key = fread($fh, filesize($file));
fclose($fh);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://example.com/xmlreq.php");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_REFERER, $key);
curl_setopt($ch, CURLOPT_POSTFIELDS, "greeting=hello");
curl_exec($ch);
curl_close($ch);
接收代碼(xmlreq.php):
if($_SERVER['REQUEST_METHOD'] === "POST"){
$file = "key";
$fh = fopen($file, "r");
$key = fread($fh, filesize($file));
fclose($fh);
$refkey = $_SERVER['HTTP_REFERER'];
if($refkey == $key){
print_r("hello, world!"); // it should run this
}else
header("HTTP/1.0 418 I'm a teapot"); // but runs this instead
}else
header("HTTP/1.0 404 Not Found");
是否需要修剪?這就是我要做的第一件事(在xmlreq.php中) – Fosco 2011-06-03 15:25:33
確實,這個伎倆。今天是星期五,我的大腦似乎在別處。 – 2011-06-03 15:32:48
HTTP_REFERRER應該是一個URL,而不是一個關鍵。爲什麼不使用自定義標題來代替重載(濫用)現有標題? – 2011-06-03 15:33:38