PHP cURL 返回 HTTP/1.1 100 Continue

当PHP cURL 时,如果POST的数据部分超过了1024字节,发送POST请求时header部分会包含一个参数Expect:100-continue,询问服务器是否愿意接收数据,收到服务器返回的100-continue应答后再把数据POST给服务器。

在项目中遇到一个问题如下:

当传输的数据较少时,cURL拿到的返回是这样的

array(2) {
  ["header"]=>
  string(249) "HTTP/1.1 200 OK
Date: Wed, 30 Mar 2016 05:24:27 GMT
Content-Type: application/json
Content-Length: 34
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: checkinfo=; expires=Tue, 31 Mar 2015 05:24:27 GMT; Path=/
Server: TornadoServer/4.2"
  ["body"]=>
  string(30) "{"error_msg":"","is_succ":"1"}"
}
但是数据多后,拿到的返回是这样的

array(2) {
  ["header"]=>
  string(21) "HTTP/1.1 100 Continue"
  ["body"]=>
  string(249) "HTTP/1.1 200 OK
Date: Wed, 30 Mar 2016 05:26:01 GMT
Content-Type: application/json
Content-Length: 34
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: checkinfo=; expires=Tue, 31 Mar 2015 05:26:01 GMT; Path=/
Server: TornadoServer/4.2"
}
正常情况下,应该返回200 OK,但是数据过的情况下header是100 Continue,body中则为本应出现在header中的内容,接口对接方那边说数据成功收到了,说明POST成功了,但是 "{"error_msg":"","is_succ":"1"}"这个理应出现的返回没了。

为了解决这个问题,上网查资料,发现在header中设置Expect为空即可。

curl_setopt( $curl_handle, CURLOPT_HTTPHEADER, array( 'Expect:' ) );

这样返回信息就正常了。

你可能感兴趣的:(PHP)