我已經被要求執行位於另一臺服務器上的腳本,腳本可以通過瀏覽器輕鬆執行(它有一個小登錄頁面,然後通過訪問url腳本(在.cfm中)執行)使用php登錄,然後執行腳本
我該怎麼用PHP做這件事?我正在考慮使用curl_exec來訪問該頁面,但我不知道如何通過登錄。這甚至可能嗎?
我已經被要求執行位於另一臺服務器上的腳本,腳本可以通過瀏覽器輕鬆執行(它有一個小登錄頁面,然後通過訪問url腳本(在.cfm中)執行)使用php登錄,然後執行腳本
我該怎麼用PHP做這件事?我正在考慮使用curl_exec來訪問該頁面,但我不知道如何通過登錄。這甚至可能嗎?
是的,這是可能的;您可以通過向表單提交正常的POST數據來輕鬆地傳遞登錄信息。我假設你有一個你可以使用的名字/密碼,所以你可以通過CURLOPT_POSTFIELDS
。
如果您在登錄後需要訪問附加網址,您需要通過有效網址獲取SID,或者從Cookie更穩定地獲取SID。
在最初的curl_exec
上設置CURLOPT_COOKIEJAR
爲任何空白文件(它可以是一個tmp文件)。在隨後的curl_exec
上,正確設置URL並將CURLOPT_COOKIEFILE
設置爲相同的文件。
您可以使用庫如HTTP_Request2。
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2('http://Your site/', HTTP_Request2::METHOD_POST);
// This will set credentials for Digest auth
$request->setAuth('user', 'password', HTTP_Request2::AUTH_DIGEST);
try {
$response = $request->send();
if (200 == $response->getStatus()) {
echo $response->getBody();
} else {
echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
$response->getReasonPhrase();
}
} catch (HTTP_Request2_Exception $e) {
echo 'Error: ' . $e->getMessage();
}
?>
$request->setAuth
是這裏的關鍵方法。