如何在php中获取curl请求的请求头信息及相应头信息

如何在php中获取curl请求的请求头信息及相应头信息,第1张

获取请求头信息,可以在curl_exec函数执行前,添加代码curl_setopt($ch,CURLINFO_HEADER_OUT,true)在curl_exec函数执行后,通过 curl_getinfo($ch,CURLINFO_HEADER_OUT) 来获取curl执行请求的请求数据。

获取响应头信息,可以在curl_exec函数执行前,添加代码 curl_setopt($ch, CURLOPT_HEADER, true)curl_setopt($ch, CURLOPT_NOBODY,true)之后 通过curl_exec函数来获取响应头信息。获取设置 curl_setopt($ch, CURLOPT_NOBODY,false)然后对curl_exec获取的值通过\r\n\r\n进行分割截取第一部分即为响应头信息。

curl是一个强大的命令行工具,它可以通过网络将信息传递给服务器或者从服务器获取数据。他支持很多的传输协议,尤其是HTTP/HTTPS以及其他诸如FTP/FTPS, RTSP, POP3/POP3S, SCP, IMAP/IMAPS协议等。当你使用curl向一个URL发送HTTP请求的时候,它会使用一个默认只包含必要的头部字段(如:User-Agent, Host, and Accept)的HTTP头。

在一些个例中,或许你想要在一个HTTP请求中覆盖掉默认的HTTP头或者添加一个新的自定义头部字段。例如,你或许想要重写“HOST”字段来测试一个负载均衡,或者通过重写"User-Agent"字符串来假冒特定浏览器以解决一些访问限制的问题。

为了解决所有这些问题,curl提供了一个简单的方法来完全控制传出HTTP请求的HTTP头。你需要的这个参数是“-H” 或者 “--header”。

为了定义多个HTTP头部字段,"-H"选项可以在curl命令中被多次指定。

例如:以下命令设置了3个HTTP头部字段。也就是说,重写了“HOST”字段,并且添加了两个字段("Accept-Language" 和 "Cookie")

$ curl -H 'Host: 157.166.226.25'-H 'Accept-Language: es'-H 'Cookie: ID=1234' http://cnn.com

对于"User-Agent", "Cookie", "Host"这类标准的HTTP头部字段,通常会有另外一种设置方法。curl命令提供了特定的选项来对这些头部字段进行设置:

-A (or --user-agent): 设置 "User-Agent" 字段.

-b (or --cookie): 设置 "Cookie" 字段.

-e (or --referer): 设置 "Referer" 字段.

例如,以下两个命令是等效的。这两个命令同样都对HTTP头的"User-Agent"字符串进行了更改。

$ curl -H "User-Agent: my browser" http://cnn.com

$ curl -A "my browser" http://cnn.com

wget是另外一个类似于curl,可以用来获取URL的命令行工具。并且wget也一样允许你使用一个自定义的HTTP头。点击这里查看wget命令的详细信息。

oCurl = curl_init()

// 设置请求头

$header[] = "Content-type: application/x-www-form-urlencoded"

$user_agent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36"

curl_setopt($oCurl, CURLOPT_URL, $sUrl)

curl_setopt($oCurl, CURLOPT_HTTPHEADER,$header)

// 返回 response_header, 该选项非常重要,如果不为 true, 只会获得响应的正文

curl_setopt($oCurl, CURLOPT_HEADER, true)

// 是否不需要响应的正文,为了节省带宽及时间,在只需要响应头的情况下可以不要正文

curl_setopt($oCurl, CURLOPT_NOBODY, true)

// 使用上面定义的 uacurl_setopt($oCurl, CURLOPT_USERAGENT,$user_agent)curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 )

// 不用 POST 方式请求, 意思就是通过 GET 请求

curl_setopt($oCurl, CURLOPT_POST, false) $sContent = curl_exec($oCurl)

// 获得响应结果里的:头大小

$headerSize = curl_getinfo($oCurl, CURLINFO_HEADER_SIZE)

// 根据头大小去获取头信息内容

$header = substr($sContent, 0, $headerSize)

curl_close($oCurl)


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

原文地址: http://outofmemory.cn/bake/11696505.html

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

发表评论

登录后才能评论

评论列表(0条)

保存