PHP curl能否在单个请求中检索响应头和响应正文?

PHP curl能否在单个请求中检索响应头和响应正文?

是否有任何方法可以同时获取使用PHP的cURL请求的头和正文?我发现这个选择:

curl_setopt($ch, CURLOPT_HEADER, true);

将返回主体加头但我需要解析它才能得到身体。有什么方法可以让两者都更有用(更安全)吗?

注意,对于“单一请求”,我的意思是避免在GET/POST之前发出头请求。


MYYA
浏览 933回答 3
3回答

牧羊人nacy

提供的许多其他解决方案包括:不做得对。劈开\r\n\r\n不可靠CURLOPT_FOLLOWLOCATION正在打开或何时服务器使用100代码进行响应。并不是所有的服务器都符合标准,只传输一个\n换新的台词。通过CURLINFO_HEADER_SIZE也不总是可靠的,特别是在使用代理或在某些相同的重定向场景中使用代理时。最正确的方法是CURLOPT_HEADERFUNCTION.下面是使用PHP闭包执行此操作的非常干净的方法。它还将所有标头转换为小写,以便在服务器和HTTP版本之间进行一致的处理。此版本将保留重复的标头。这符合RFC 822和RFC 2616的要求,请不要建议编辑使用mb_字符串函数,它是不正确的!$ch&nbsp;=&nbsp;curl_init();$headers&nbsp;=&nbsp;[];curl_setopt($ch,&nbsp;CURLOPT_URL,&nbsp;$url);curl_setopt($ch,&nbsp;CURLOPT_RETURNTRANSFER,&nbsp;1); //&nbsp;this&nbsp;function&nbsp;is&nbsp;called&nbsp;by&nbsp;curl&nbsp;for&nbsp;each&nbsp;header&nbsp;receivedcurl_setopt($ch,&nbsp;CURLOPT_HEADERFUNCTION, &nbsp;&nbsp;function($curl,&nbsp;$header)&nbsp;use&nbsp;(&$headers) &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;$len&nbsp;=&nbsp;strlen($header); &nbsp;&nbsp;&nbsp;&nbsp;$header&nbsp;=&nbsp;explode(':',&nbsp;$header,&nbsp;2); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(count($header)&nbsp;<&nbsp;2)&nbsp;//&nbsp;ignore&nbsp;invalid&nbsp;headers &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$len; &nbsp;&nbsp;&nbsp;&nbsp;$name&nbsp;=&nbsp;strtolower(trim($header[0])); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!array_key_exists($name,&nbsp;$headers)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$headers[$name]&nbsp;=&nbsp;[trim($header[1])]; &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$headers[$name][]&nbsp;=&nbsp;trim($header[1]); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$len; &nbsp;&nbsp;});$data&nbsp;=&nbsp;curl_exec($ch);print_r($headers);
打开App,查看更多内容
随时随地看视频慕课网APP