簡體   English   中英

jQuery >> PHP >> cURL和瀏覽器刷新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM