php的curl函数模拟post数据提交,首次速度非常慢的处理办法

如果你用 curl_setopt 函数来与远程的webservice或者抓取页面的处理时,有时会遇到很奇怪的现象,首次访问的速度异常的慢,基本上要5s-10s的时间让人奔溃。

但是怎么查也差不出问题出在哪儿,最近发现一个文章写了处理这个问题的方式。

先从解决问题入手:

1、curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); //强制协议为1.0

2、curl_setopt($ch, CURLOPT_HTTPHEADER, array(''Expect: '')); //头部要送出'Expect: '

3、curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); //强制使用IPV4协议解析域名

以3个还不行,那我也没办法了。

 

Expect:100-continue 问题:转载于:http://www.laruence.com/2011/01/20/1840.html

在使用curl做POST的时候, 当要POST的数据大于1024字节的时候, curl并不会直接就发起POST请求, 而是会分为俩步,
  1. 发送一个请求, 包含一个Expect:100-continue, 询问Server使用愿意接受数据
  2. 接收到Server返回的100-continue应答以后, 才把数据POST给Server

这是libcurl的行为.
具体的RFC相关描述: http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3
于是,这样就有了一个问题, 并不是所有的Server都会正确应答100-continue, 比如lighttpd, 就会返回417 “Expectation Failed”, 则会造成逻辑出错,,

解决方法:curl_setopt($ch, CURLOPT_HTTPHEADER, array(''Expect: '')); //头部要送出'Expect: '

 

IPV4问题:转载于http://www.lovelucy.info/curl-exec-wget-slow-due-to-ipv6.html

现在很多服务器都开启了 IPv6 却没有路由,无法真正工作,反而导致一些不可预料的问题。

你可能感兴趣的:(post)