php的curl选项curlopt,CURLOPT_NOBODY选项,php中文手册中坑爹的翻译!

在php中文手册对curl_setopt函数说明的翻译中,对CURLOPT_NOBODY选项说明是如下:

CURLOPT_NOBODY

启用时将不对HTML中的BODY部分进行输出。

这一点是完全翻译错误。准确的意思是指定http请求方法为HEAD,在http协议中服务器对HEAD方法响应消息中将只包含消息头的部分,而不包含消息体(即body)。对应分析php-curl扩展中对CURLOPT_NOBODY

命令字的响应是直接调用curl_easy_setopt,在curl_easy_setopt中对CURLOPT_NOBODY命令字响应其实是设置请求方法为HEAD,如下

在Curl_setopt()函数中

case CURLOPT_NOBODY:

/*

* Do not include the body part in the output data stream.

*/

data->set.opt_no_body = (0 != va_arg(param, long))?TRUE:FALSE;

break;

以及在Curl_http()函数中

if(data->set.str[STRING_CUSTOMREQUEST])

request = data->set.str[STRING_CUSTOMREQUEST];

else {

if(data->set.opt_no_body)

request = "HEAD";

实际验证结果,也证明如此,如:

Administrator@attention /e/Code

$ php PageCrawler.php > /dev/null

* About to connect() to port 80 (#0)

*   Trying 61.174.55.11...

* connected

* Connected to (61.174.55.11) port 80 (#0)

> HEAD /539349.html HTTP/1.1

Host:

Accept: */*

Referer:

User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36

Cache-Conrol: no-cache

< HTTP/1.1 200 OK

< Server: JDWS

< Date: Sun, 11 Aug 2013 14:01:13 GMT

< Content-Type: text/html; charset=gbk

< Vary: Accept-Encoding

< Last-Modified: Sun, 11 Aug 2013 12:00:54 GMT

< Expires: Sun, 11 Aug 2013 14:06:14 GMT

< Cache-Control: max-age=300

< X-Cache: EXPIRED from

< Age: 0

< Via: http/1.1 ( [cSsSfD]), http/1.1 HZ-CT-1-JCS-45 ( [cMsSf ])

< Connection: keep-alive

* no chunk, no close, no size. Assume close to signal end

<

* Closing connection #0

由于CURLOPT_NOBODY是设置只返回http响应头,因此不能同时设置CURLOPT_HEADER为FALSE(输出中不包含响应头),否则curl_exec将失败返回FALSE

看来什么事都不能太相信手册,哪怕是官方的,源码才是王道!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值