模拟HTTP请求超时时间设置

HTTP请求有两个超时时间:一个是连接超时时间,另一个是数据传输的最大允许时间(请求资源超时时间)。

使用curl命令行

连接超时时间用 --connect-timeout 参数来指定

数据传输的最大允许时间用 -m 参数来指定

例如:

curl --connect-timeout 10 -m 20 "http://XXXXXXX"

连接超时的话,出错提示形如:

curl: (28) connect() timed out!

数据传输的最大允许时间超时的话,出错提示形如:

curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received

使用PHP的curl_init

连接超时时间

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);

数据传输的最大允许时间

curl_setopt($ch, CURLOPT_TIMEOUT, 3);

使用curl_error($ch)查看错误的详情

<?php

// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// grab URL and pass it to the browser
curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);

var_dump(curl_error($ch));

使用PHP的fsockopen

连接超时时间

fsockopen( $hostname, $port, $errno, $errstr, $timeout);

数据传输的最大允许时间

暂时不清楚,虽然可以通过stream_set_timeout和stream_get_meta_data(需放在fread之后才有效果)得到是否数据传输超时,但是不能在设置的超时时间内停止请求,所以目标页内容如果sleep请求页会一直停止直到达到最大执行时间。

示例

<?php
$fp = fsockopen("www.example.com", 80);
if (!$fp) {
    echo "Unable to open\n";
} else {

    fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
    stream_set_timeout($fp, 2);
    $res = fread($fp, 2000);

    $info = stream_get_meta_data($fp);
    fclose($fp);

    if ($info[‘timed_out‘]) {
        echo ‘Connection timed out!‘;
    } else {
        echo $res;
    }

}
?>

使用file_get_contents

连接超时时间和数据传输的最大允许时间均为设置的timeout,如

<?php
    $timeout = 60;
    $options = array(
          ‘http‘=>array(
            ‘method‘=>"GET",
            ‘header‘=>"Accept-language: en\r\n",
            ‘timeout‘ => $timeout
          )
        );
    $context = stream_context_create($options);
    $contents = file_get_contents($source, false, $context);
?> 

file_get_contents模拟post和get

function http_request($url, $post = null)
{
     $timeout=30;
     if(is_array($post))
     {
      ksort($post);
      $options[‘http‘] = array
      (
          ‘timeout‘=>$timeout,
          ‘method‘ => ‘POST‘,
          ‘content‘ => http_build_query($post, ‘‘, ‘&‘),
      );
     }
     $context = stream_context_create($options);
     return file_get_contents($url, false, $context);
}
时间: 2024-11-23 13:43:37

模拟HTTP请求超时时间设置的相关文章

ASP.NET 页面请求超时时间设置 Server.ScriptTimeOut executionTimeout

ASP.NET 页面请求超时时间(页面后台程序执行时间)默认值为 110 秒(在 .NET Framework 1.0 版和 1.1 版中,默认值为 90 秒) 即: Server.ScriptTimeout = 110(HttpServerUtility.ScriptTimeout = 110) System.Web.Configuration.HttpRuntimeSection().ExecutionTimeout.ToString() = 00:01:50(110 秒) 方法一:设置 S

iOS开发中如何设置请求超时时间

1 NSString *baseUrl; 2 NSURL *url = [NSURL URLWithString:[baseUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 3 NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInter

接口调试工具ApiPost的发送超时时间设置方法

有部分使用ApiPost的同学反应:发送接口调试时,响应超时时间设置的太短导致接口访问失败,怎么设置呢? 就连百度也有很多人在搜: 今天就来说一说. ApiPost简介: ApiPost是一个支持团队协作,并可直接生成文档的API调试.管理工具.它支持模拟POST.GET.PUT等常见请求,是后台接口开发者或前端.接口测试人员不可多得的工具 . 官网:https://www.apipost.cn/ ApiPost的发送超时时间设置方法 对于老版本的ApiPost,这个超时时间的确是无法设置的.新

网站超时时间 设置

全局超时时间 服务器上如果有多个网站,希望统一设置一下超时时间,则需要设置 Machine.config 文件中的 ExecutionTimeout 属性值. Machine.config 文件位于 %SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\ 目录中. 例如: 复制代码 代码如下: <httpRuntime executionTimeout="90" maxRequestLength="409

VC socket Connect 超时时间设置

设置connect超时很简单,CSDN上也有人提到过使用select,但却没有一个令人满意与完整的答案.偶所讲的也正是select函数,此函数集成在winsock1.1中,简单点讲,"作用使那些想避免在套接字调用过程中被锁定的应用程序,采取一种有序的方式,同时对多个套接字进行管理"(<Windows网络编程技术>原话).使用方法与解释请见<Windows网络编程技术>. 在使用此函数前,需先将socket设置为非阻塞模式,这样,在connect时,才会立马跳过,

MYSQL的数据连接超时时间设置

大规模多线程操作事务的时候,有时候打开一个链接,会进行等待,这时候如果数据库的超时时间设置的过短,就可能会出现,数据链接自动被释放,当然设置过大也不好,慢SQL或其他因素引起的链接过长,导致整个系统被拖慢,甚至挂掉. SO,适当的设置超时时间. 网上查了很多资料,大多数解决方案都写的太复杂,其实只要设置一下等待超时时间就OK了 设置方法: SHOW GLOBAL VARIABLES LIKE '%timeout%'SET GLOBAL wait_timeout=10000

curl的超时时间设置

curl的超时时间设置 使用curl时,有两个超时时间:一个是连接超时时间,另一个是数据传输的最大允许时间. 连接超时时间: --connect-timeout 例: curl --connect-timeout 1 "http://localhost/index.html" 出错提示形如: curl: (28) connect() timed out! 不能连接提示如: curl:(7) couldn't connect to host 数据传输的最大允许时间用: -m 例: cur

【Hadoop】Hadoop DataNode节点超时时间设置

hadoop datanode节点超时时间设置 datanode进程死亡或者网络故障造成datanode无法与namenode通信,namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长.HDFS默认的超时时长为10分钟+30秒.如果定义超时时间为timeout,则超时时长的计算公式为: timeout = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval. 而默认的heartbeat.reche

CURL超时时间设置

一次完整的http请求,一般包含三个步骤: 通过DNS把域名解析成IP 通过IP地址连接到目标主机 获取目标主机数据(1.给目标主机输出http请求头,以\r\n\r\n结尾:2.获取目标主机传过来的数据) php 的 curl 对以上三个步骤都有设置超时时间的方法 1.保存DNS信息时间 CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间,默认为120秒. 2.连接超时时间 CURLOPT_CONNECTTIMEOUT 以秒为单位.如果设置为0,则无限等待.