繁体   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