2011-07-31 55 views
1

我一直在搞乱CURL过去的一天,我似乎无法弄清楚如何解析出返回数据。我知道我可以编写一个REGEX来从响应中提取数据,但似乎有一些功能可能会丢失。这是我想尝试和做的。解析PHP CURL数据

我想要发布到不同的域,并取回3事情 1.响应头 2.响应数据 3.会话cookie

有没有一种方法可以让我得到这些3件事分开回来?现在我只是回复一个带有响应头和响应数据的纯文本响应。我想能够做些类似于

$Response = curl_exec($Curl_Connection); 
$ResponseData = $Response['Data']; 
$ResponseHeader = $Response['Header']; 
ResponseCookie = $Response['Cookie']; 

卷曲是否提供类似的东西?

回答

5

正如我答道:

no post data returned when requesting headers CURLOPT_HEADER. PHP CURL

地址:

curl_setopt($Curl_Connection, CURLOPT_HEADER, TRUE); 

$Response = curl_exec($Curl_Connection); 
$curlHeaderSize=curl_getinfo($ch,CURLINFO_HEADER_SIZE); 

$ResponseData = mb_substr($result, $curlHeaderSize); 
$ResponseHeader = mb_substr($result, 0, $curlHeaderSize); 

preg_match_all('|Set-Cookie: (.*);|U', $ResponseHeader, $content); 
$ResponseCookie = implode(';', $content[1]); 
+0

是这样回答我的问题。但它在某种程度上并不是。我仍然不知道如何在返回主体的同时获取响应头文件。另一部分是cookie位于请求头部。我怎么看? – DvideBy0

+0

我爱你,是的我是一个从来没有用过的白痴mb_substr :) – DvideBy0

3

根据卷曲文档:

/* TRUE to include the header in the output. */ 
curl_setopt($Curl_Connection, CURLOPT_HEADER, TRUE); 

所以头部被添加到curl_exec命令的输出。我一直在吐出这个,我没有看到任何方式从响应主体中单独检索头。当你开始阅读压缩输出(压缩,充气)时,情况会变得更糟

最重要的是,它是一个大字符串,而不是数组,所以如果你想以例如curl_getinfo的格式返回头部,数组。

最简单的是要做到这一点:

$backend_output = curl_exec($ch); 
list($backend_response_headers, $backend_response_body) 
     = explode("\r\n\r\n", $backend_output, 2); 

这将高达拆分那些2,但你最终获得的响应头,而不是一个数组这将是这么多有用的字符串。现在由此做出一个arrray并不是那么明显,即使有一个正则表达式,因为你不能分裂,例如像/(\ w)\ s这样简单的东西:(\ w)/ as':'可能出现在某些字段中。如果curl能够单独提供标题,但是就我阅读文档而言,它会非常酷,但似乎并不存在。

关于您的会话cookie,我相信您需要使用CURLOPT_COOKIESESSION = true选项,但我对cookie的使用经验不足,因为我几乎没有专业的需要使用它们。祝你好运

更新:如果您缺少pecl,可以使用http://php.net/manual/en/function.http-parse-headers.php或用户注释部分的自定义函数解析标题。