我有一個應用程式發出兩個請求,一個接一個。開頭只有一個 curl_init() 并且所有選項都保持不變(當然,除了 url 和資料)我需要再次設定所有選項,還是 curl 物件保留它們?我一直在使用谷歌和 stackoverflow,但還沒有找到這個問題的答案——或者沒有找到合適的問題要問。
uj5u.com熱心網友回復:
它可能取決于具體的選項,但我只是運行了一個快速測驗腳本,似乎保留了這些選項:
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
// request one:
echo "Sending request one..." . PHP_EOL;
curl_setopt($ch, CURLOPT_URL, "https://stackoverflow.com");
$response1 = curl_exec($ch);
// request two:
echo "Sending request two..." . PHP_EOL;
curl_setopt($ch, CURLOPT_URL, "https://www.google.com");
$response2 = curl_exec($ch);
curl_close($ch);
echo "Both requests submitted." . PHP_EOL;
echo "Request 1 response:" . PHP_EOL;
echo substr($response1, 0, 50) . "..." . PHP_EOL;
echo PHP_EOL;
echo "Request 2 response:" . PHP_EOL;
echo substr($response2, 0, 50) . "..." . PHP_EOL;
輸出:
Sending request one...
Sending request two...
Both requests submitted.
Request 1 response:
<!DOCTYPE html>
<html " itemtype="http:/...
如果CURLOPT_RETURNTRANSFER在第一次請求后未保留該選項,它將恢復為其默認值,FALSE即在該Sending request two...行之后立即從 Google 輸出整個 HTML 頁面。
值得一提的是,一些 curl 選項設定了一些您可能不知道的額外屬性。例如,如果您的第一個請求設定了該CURLOPT_POSTFIELDS選項,則這也會隱式設定請求方法以及 Content-Type 和 Content-Length 標頭值。當您為下一個請求重新使用 curl 句柄時,您需要注意這一點,例如,如果這需要是一個 GET 請求。
就個人而言,我總是為順序請求創建一個新句柄。如果這些請求需要相同的選項,我傾向于使用curl_setopt_array預定義的選項陣列:
$options = [
CURLOPT_RETURNTRANSFER => TRUE,
// ...any other shared options
];
$ch1 = curl_init($url1);
curl_setopt_array($ch1, $options);
curl_setopt($ch1, CURLOPT_POSTFIELDS, "test=test");
$response1 = curl_exec($ch1);
curl_close($ch1);
var_dump($response1);
$ch2 = curl_init($url2);
curl_setopt_array($ch2, $options);
$response2 = curl_exec($ch2);
curl_close($ch2);
var_dump($response2);
這是一種非常簡單的重用默認 curl 選項的方法,而不會污染第二個請求,因為第一個請求留下了意想不到的副作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/407764.html
標籤:
上一篇:如何設定shopify訂單履行?
