php curl 分割header和body信息

近期做项目使用了阿里云的云市场的api,调用完发现返回了头部信息,因此看了一下阿里云提供的sdk里的写的方法,

发现可以通过这样分割
阿里的方法
class HttpResponse
{
    private $content;
	private $body;
	private $header;
	private $requestId;
	private $errorMessage;
	private $contentType;
	private $httpStatusCode;

	/**
	*根据headersize大小,区分返回的header和body
	*/
	public function setHeaderSize($headerSize) {
		if (0 < $headerSize && 0 < strlen($this->content)) {
			$this->header = substr($this->content, 0, $headerSize);
			self::extractKey();
		}
		if (0 < $headerSize && $headerSize < strlen($this->content)) {
			$this->body = substr($this->content, $headerSize);
		}
	}

	/**
	*提取header中的requestId和errorMessage
	*/
	private function extractKey() {
		if (0 < strlen($this->header)) {
			$headers = explode("\r\n", $this->header);
			foreach ($headers as $value) {
				if(strpos($value, "X-Ca-Request-Id:") !== false) 
				{
					$this->requestId = trim(substr($value, strlen("X-Ca-Request-Id:")));
				}
				if(strpos($value, "X-Ca-Error-Message:") !== false) 
				{
					$this->errorMessage = trim(substr($value, strlen("X-Ca-Error-Message:")));
				}
			}
		}
	}
}


或者直接
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
    $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $header = substr($response, 0, $headerSize);
    $body = substr($response, $headerSize);
}


第三种方法基于header和body是通过两个回车换行来分割的,所以可以通过如下代码实现:

$response = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
    list($header, $body) = explode("\r\n\r\n", response, 2);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值