近期做项目使用了阿里云的云市场的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);
}