一些背景故事:https: //serverfault.com/questions/714273/curl-returning-error-52-or-56-with-rest-api-call-spanning-more-than-5-minutes
所以,我需要通过PHP进行这个REST API调用,并且我可以通过CLI让它工作的唯一方法是--keepalive-time
为CURL 设置.那么我该如何在PHP中做到这一点?以下是直接通过CURL进行的(通过删除审讯)工作API调用:
curl --max-time 600 -k -o dump.txt --connect-timeout 0 --keepalive-time 30 --trace-ascii trace.txt --trace-time -X GET -H "tenant-code: 1cmPx7tqVDVTdN1GSelwycFUmICmASnLCmNQsV72" -H "Authorization: Basic JxHAsXeUiHMRkS8Msiu6pWb3PvY20p6am3QvXCY3knXTAntlxTBS3EyEDgly" -H "Content-Type: application/json" -H "Cache-Control: no-cache" 'https://api.endpoint.com/API/v1/system/users/search?groupid=555'
Run Code Online (Sandbox Code Playgroud)
该--max-time
和--connect-timeout
值似乎并没有那么多(只要他们是我所需要的范围内),但到物质--keepalive-time
似乎需要得到的数据,从回调.这是我正在使用的一些测试代码:
<?php
$url = "https://api.endpoint.com/API/v1/system/users/search?groupid=555";
$session = curl_init($url);
curl_setopt($session,CURLOPT_RETURNTRANSFER, true);
curl_setopt($session,CURLOPT_TIMEOUT, 600);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($session, CURLOPT_AUTOREFERER, true);
curl_setopt($session, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($session, CURLOPT_VERBOSE, true);
curl_setopt($session, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($session, CURLOPT_NOPROGRESS, false);
curl_setopt($session, CURLOPT_FORBID_REUSE, true);
curl_setopt($session, CURLOPT_FRESH_CONNECT, true);
$headers = array(
'tenant-code: 1cmPx7tqVDVTdN1GSelwycFUmICmASnLCmNQsV72',
'Authorization: Basic JxHAsXeUiHMRkS8Msiu6pWb3PvY20p6am3QvXCY3knXTAntlxTBS3EyEDgly',
'Cache-Control: no-cache',
'Accept: application/json');
curl_setopt($session, CURLOPT_HTTPHEADER, $headers);
$output = curl_exec($session);
$httpcode = curl_getinfo($session, CURLINFO_HTTP_CODE);
curl_close($session);
var_dump($httpcode, $output, $session, $headers, $url);
?>
Run Code Online (Sandbox Code Playgroud)
我添加curl_setopt($session, CURLOPT_FORBID_REUSE, true);
并curl_setopt($session, CURLOPT_FRESH_CONNECT, true);
进行测试,但它们似乎对我的问题没有任何影响.那么在PHP中用CURL处理这个需要什么呢?
如果您使用的是使用cURL 7.25.0或更高版本构建的PHP 5.5或更高版本(当前为5.5,5.6和7),则可以在PHP中设置这些cURL选项以匹配--keepalive-time
参数(PHP <= 5.4没有这些cURL选项可用):
curl_setopt($session, CURLOPT_TCP_KEEPALIVE, 1);
curl_setopt($session, CURLOPT_TCP_KEEPIDLE, 30);
curl_setopt($session, CURLOPT_TCP_KEEPINTVL, 15);
Run Code Online (Sandbox Code Playgroud)
CURLOPT_TCP_KEEPIDLE
libcurl中的常量对应于--keepalive-time
命令行选项curl
.
有关详细信息,请参阅有关CURLOPT_TCP_KEEPALIVE,CURLOPT_TCP_KEEPIDLE和CURLOPT_TCP_KEEPINTVL的cURL文档.
注意:这些选项不可用,如果您使用的是PHP 5.4或更低版本,则无法使用这些选项.
归档时间: |
|
查看次数: |
2707 次 |
最近记录: |