[英]Jquery >> PHP >> cURL and browser refresh
我幾個星期前寫的一個網站有問題。 我的網站通過網站_2上托管的API與另一個網站_2通信
通過查詢POST向PHP文件請求curl操作。 如果由於某種原因,該操作花費了較長的時間(我無法確定原因),並且用戶點擊了刷新。.發送到API的命令已完成,但是我的服務器沒有任何結果,因此無法登錄或對結果有任何處理..有沒有辦法保持這種交易的完整性? 以下是我的代碼,無論在website_2上獲得什么結果,我仍然會失敗
function doCommit($url_)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_);
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.23 (Windows NT 5.1; U; en)');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_TIMEOUT,5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,5);
$commit = curl_exec($ch);
curl_close($ch);
if(!curl_exec($ch))
{
$ERROR="<Transaction>
<Result>Failed</Result>
<Reason>Operation Timed Out</Reason>
</Transaction>";
$oXML = new SimpleXMLElement($ERROR);
return $oXML;
}
else{
$oXML = new SimpleXMLElement($commit);
return $oXML;
}
// return $oXML->Reason;
}
您可以使用curl參數來解決設置“請求超時”的問題:
CURLOPT_TIMEOUT-設置在卷曲單個函數超時之前要等待的秒數。
CURLOPT_CONNECTTIMEOUT-設置卷曲連接超時之前的最長時間。
...然后如果curl_exec失敗,您可以返回一個文本:
if(curl_exec($curl) === false)
{
echo 'ERROR: ' . curl_error($curl);
}
通過以下代碼解決了
function doCommit($url_)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url_);
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.23 (Windows NT 5.1; U; en)');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_TIMEOUT,2);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,2);
$commit = curl_exec($ch);
curl_close($ch);
if(curl_errno($ch) == 0)
{
$oXML = new SimpleXMLElement($commit);
return $oXML;
}
else{
$ERROR="<Transaction>
<Result>Failed</Result>
<Reason>Operation Timed Out</Reason>
</Transaction>";
$oXML = new SimpleXMLElement($ERROR);
return $oXML;
}
// return $oXML->Reason;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.