php curl post 怎么设置header appliactionjson

php curl post 怎么设置header appliactionjson,第1张

其实就是构造一个

$header = array(

'Content-Type: text/json',

)

curl_setopt($ch, CURLOPT_HTTPHEADER, $header)

更多内容请参考我的博客《PHP cURL实现模拟登录与采集使用方法详解》

http://www.zjmainstay.cn/php-curl

里面的“十一、发送与获取json数据”专门讲解这个问题。

其实curl里面早就有对HEAD协议的支持// 只需要在你的代码中加上这样一行,就会自动选择head协议

curl_setopt($ch, CURLOPT_NOBODY, true)

如果你要读取

Content-Length

,那么只需要在curl_exec后// 读取的header里的Content-Length值

$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD)

需要说明的是HEAD协议虽然被大部分服务器支持,但也不是说所有的服务器都支持,有的服务器为了防抓取,在设置中干掉了这个协议。而

Content-Length

也不是必须的字段,你应该做到如果有这个值,而且超过了最大值,可以返回错误,如果没有这个值,或者没有超过最大值,就必须自己通过已经下载的内容大小来判断。

至于你说的最大资源下载长度,我还没看到这个设置项,不过这个问题有一个更加美好的解决方案,那就是用到

CURLOPT_HEADERFUNCTION和CURLOPT_WRITEFUNCTION

两个回调,那么就只需要一次请求即可完成所有的判断,而且可以随时断掉$size = 0$max_size = 123456

curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($ch, $str) {

// 第一个参数是curl资源,第二个参数是每一行独立的header!

list ($name, $value) = array_map('trim', explode(':', $str, 2))

$name = strtolower($name)

// 判断大小啦

if ('content-length' == $name) {

if ($value $max_size) {

return 0// 返回0就会中断读取}}})

// 对于没有content-length的,我们一边读取一边判断

curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $str) use (&$size) {

$len = strlen($str)

$size += $len

if ($size $max_size) {


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7768906.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存