我正在向網站發送發布資料,但該網站大部分時間都回傳 502 Bad Gateway。我想每秒發送一次發布資料,直到該網站接受我的發布請求。
<?php
$postData = "";
$req = curl_init("example.com");
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_POSTFIELDS, $postData);
curl_setopt($req, CURLOPT_HTTPHEADER, array(");
curl_setopt($req, CURLOPT_COOKIE,"\_");
$result = curl_exec($req);
echo "Status code: ".curl_getinfo($req, CURLINFO_HTTP_CODE)."\\n";
echo "Response body: ".$result."\\n";
curl_close($req);
uj5u.com熱心網友回復:
有很多方法可以每隔 n 秒重復一次卷曲。您可以使用sleep遍歷 curl 塊,或者簡單地使用 HTML refresh 來完成這項作業。
對于睡眠,您可以參考以下檔案:
https://www.php.net/manual/zh/function.sleep.php
選項 1:對于 HTML 方式,您可以簡單地添加一行(比如每 5 秒重新運行一次 curl 腳本):
<meta http-equiv="refresh" content="5">
PHP 代碼可以是:
<meta http-equiv="refresh" content="5">
<?php
$postData = "";
$req = curl_init("example.com");
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_POSTFIELDS, $postData);
curl_setopt($req, CURLOPT_HTTPHEADER, array(");
curl_setopt($req, CURLOPT_COOKIE,"\_");
$result = curl_exec($req);
echo "Status code: ".curl_getinfo($req, CURLINFO_HTTP_CODE)."\\n";
echo "Response body: ".$result."\\n";
curl_close($req);
?>
選項 2:對于 PHP 方式(或命令模式),請通過 sleep 執行以下操作:
<?php
$success=0;
while ($success==0){
// your original curl
$postData = "";
$req = curl_init("example.com");
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_POSTFIELDS, $postData);
curl_setopt($req, CURLOPT_HTTPHEADER, array(");
curl_setopt($req, CURLOPT_COOKIE,"\_");
$result = curl_exec($req);
echo "Status code: ".curl_getinfo($req, CURLINFO_HTTP_CODE)."\\n";
if ( curl_getinfo($req, CURLINFO_HTTP_CODE) =="200" ){
$success=1;
}
echo "Response body: ".$result."\\n";
curl_close($req);
// end curl
// wait for 10 seconds before the next iteration
sleep(10);
// end wait.
}
?>
但是(對于選項 2),請將 php 腳本執行超時設定為足夠長以滿足您的需要。通過修改 php.ini 來表示,或者將以下內容添加到 PHP 的頂部:
ini_set('max_execution_time', 5000); //5000 seconds
uj5u.com熱心網友回復:
嘗試這個
$processCompleted = false;
$interval = 5; //5 seconds
$request = curl_init('http://www.example.com/');
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_HTTPHEADER, array('Content-Type:application/json','Authorization:'.$token));
while(!$processCompleted) {
$response = curl_exec($request);
// Check HTTP status code
if (!curl_errno($response)) {
switch ($http_code = curl_getinfo($request , CURLINFO_HTTP_CODE)) {
case 200: # OK
...//do your stuff
break;
default:
sleep($interval);
}
}
}
curl_close($ch);
uj5u.com熱心網友回復:
你只需要重復你的curl_exec電話,直到CURLINFO_RESPONSE_CODE200。
$postData = "";
$req = curl_init("example.com");
curl_setopt($req, CURLOPT_RETURNTRANSFER, true);
curl_setopt($req, CURLOPT_POSTFIELDS, $postData);
curl_setopt($req, CURLOPT_HTTPHEADER, array(''));
curl_setopt($req, CURLOPT_COOKIE,'\_');
do {
$result = curl_exec($req);
$responseCode = curl_getinfo($req, CURLINFO_RESPONSE_CODE);
echo "Status code: $responseCode\n";
echo "Response body: $result\n";
// keep in mind that sleep returns 0 on success,
// that would evaluate to false without strict comparison
} while ($responseCode !== 200 && sleep(1) !== false);
curl_close($req);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/448097.html
