Php 卷曲慢启动传输时间
你好 cURL在请求页面时动作非常慢。我知道这不是请求的页面,因为页面会立即返回到浏览器中 我注意到的两件事Php 卷曲慢启动传输时间,php,performance,curl,Php,Performance,Curl,你好 cURL在请求页面时动作非常慢。我知道这不是请求的页面,因为页面会立即返回到浏览器中 我注意到的两件事 启动转移时间通常为20分钟 本地端口似乎每次都在变化。这正常吗 偶尔,cURL会立即做出响应 我有以下代码: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, fal
- 启动转移时间通常为20分钟
- 本地端口似乎每次都在变化。这正常吗
- 偶尔,cURL会立即做出响应
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, false);
$output = curl_exec($ch);
curl_close($ch);
回显curl_getinfo()可以提供以下信息
[url] => http://127.0.0.1:80/wpengine/?json=t
[content_type] => text/html; charset=iso-8859-1
[http_code] => 302
[header_size] => 215
[request_size] => 64
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 17.238
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 221
[speed_download] => 12
[speed_upload] => 0
[download_content_length] => 221
[upload_content_length] => 0
[starttransfer_time] => 17.238
[redirect_time] => 0
[certinfo] => Array
(
)
[primary_ip] => 127.0.0.1
[primary_port] => 80
[local_ip] => 127.0.0.1
[local_port] => 51875
[redirect_url] =>
有谁能给我指点一下如何弄清楚到底发生了什么
下面是Apache访问日志中的几行代码
127.0.0.1 - - [06/Dec/2013:12:01:22 -0500] "GET /wpengine/?json=t HTTP/1.1" 302 221
127.0.0.1 - - [06/Dec/2013:12:01:12 -0500] "GET /community HTTP/1.1" 200 6266
127.0.0.1 - - [06/Dec/2013:12:01:22 -0500] "GET /public/js/jquery.js?b=10 HTTP/1.1" 304 -
我在点击Google Analytics的MP API时发现了一个类似的问题。。。starttransfer时间始终是1.0秒加上一个很小的量,从中我推断某个地方有1秒的延迟,我猜是cURL。在我这边,它没有使用CPU,我怀疑谷歌是否在拖延时间。。。来自curl_getinfo()的otuput 大堆 ( [网址]=>http://www.google-analytics.com/collect [内容类型]=>image/gif [http_代码]=>200 [标题大小]=>388 [请求大小]=>201 [filetime]=>-1 [ssl\u验证\u结果]=>0 [重定向\u计数]=>0 [总时间]=>1.021528 [namelookup_time]=>8.7E-5 [连接时间]=>8.8E-5 [预传输时间]=>0.000324 [上传大小]=>1736 [下载大小]=>35 [速度下载]=>34 [速度上传]=>1699 [下载内容长度]=>35 [上传内容长度]=>1736 [开始传输时间]=>1.002496 [重定向时间]=>0 [certinfo]=>数组 ( ) [重定向\u url]=> )
我在点击Google Analytics的MP API时发现了一个类似的问题。。。starttransfer时间始终是1.0秒加上一个很小的量,从中我推断某个地方有1秒的延迟,我猜是cURL。在我这边,它没有使用CPU,我怀疑谷歌是否在拖延时间。。。来自curl_getinfo()的otuput 大堆 ( [网址]=>http://www.google-analytics.com/collect [内容类型]=>image/gif [http_代码]=>200 [标题大小]=>388 [请求大小]=>201 [filetime]=>-1 [ssl\u验证\u结果]=>0 [重定向\u计数]=>0 [总时间]=>1.021528 [namelookup_time]=>8.7E-5 [连接时间]=>8.8E-5 [预传输时间]=>0.000324 [上传大小]=>1736 [下载大小]=>35 [速度下载]=>34 [速度上传]=>1699 [下载内容长度]=>35 [上传内容长度]=>1736 [开始传输时间]=>1.002496 [重定向时间]=>0 [certinfo]=>数组 ( ) [重定向\u url]=> ) 我通过设置
curl_setopt($ch, CURLOPT_POST, false);
我通过设置
curl_setopt($ch, CURLOPT_POST, false);
这主要是因为当服务器处理大量POST数据时,Expect:100 continue头CURL发送到服务器,而服务器恰好不支持此功能。您可以通过为
curl
命令行添加-vv
进行确认,并查看输出
要解决这个问题,您可以
Expect:100 continue
header,或-H“Expect:
选项发送它(在php中,您可以参考以下答案:)Expect:100 continue的链接
这主要是因为服务器在处理大量POST数据时会发送Expect:100 continue
头卷曲,而服务器恰好不支持此功能。您可以通过为curl
命令行添加-vv
进行确认,并查看输出
要解决这个问题,您可以
修复服务器以支持Expect:100 continue
header,或
强制curl不通过add-H“Expect:
选项发送它(在php中,您可以参考以下答案:)
有关Expect:100 continue的链接
此线程中@brandonscript的一条评论帮助我解决了这个问题
他的回答是:
好奇的是,CURL是否首先尝试IPv6,但未能解决问题
尝试添加curl\u setopt($ch,CURLOPT\u IPRESOLVE,curl\u IPRESOLVE\u V4)强>
我的问题正好相反,我必须设置以下选项:
curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6 );
谢谢大家。这个帖子中@brandonscript的一条评论帮助我解决了这个问题
他的回答是:
好奇的是,CURL是否首先尝试IPv6,但未能解决问题
尝试添加curl\u setopt($ch,CURLOPT\u IPRESOLVE,curl\u IPRESOLVE\u V4)强>
我的问题正好相反,我必须设置以下选项:
curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6 );
谢谢大家。如果您在本地运行,您设置了什么服务器?你能检查一下服务器日志吗?@r3mus我正在用Apache运行Wamp。我编辑了我的帖子,加入了访问日志中的几行内容,想知道CURL是否首先尝试IPv6,但未能解决?尝试添加curl\u setopt($ch,CURLOPT\u IPRESOLVE,curl\u IPRESOLVE\u V4)代码>嗯,这没什么区别。我觉得这很令人费解。它是否与会话有关,因为它位于同一个域上?只是在黑暗中拍摄…不是很确定,但看看你的日志,一旦CURL真的命中服务器,它的速度会非常快。您可以在某个地方的公共服务器上尝试此操作以消除localhost变量吗?如果您在本地运行此操作,您设置了什么服务器?你能检查一下服务器日志吗?@r3mus我正在用Apache运行Wamp。我编辑了我的帖子,加入了访问日志中的几行内容,想知道CURL是否首先尝试IPv6,但未能解决?尝试添加curl\u setopt($ch,CURLOPT\u IPRESOLVE,curl\u IPRESOLVE\u V4)代码>嗯,这没什么区别。我觉得这很令人费解。它是否与会话有关,因为它位于同一个域上?只是在黑暗中拍摄…不是很确定,但看看你的日志,一旦CURL真的命中服务器,它的速度会非常快。您可以在公共服务器上的某个位置尝试此操作,以实现elimi