2013-03-26 30 views
0

这是$result回报:如何从原始HTTP响应中检索特定的头字段?

HTTP/1.1 200 OK 
Server: SERVER 
Content-Type: text/xml;charset=utf-8 
Connection: close 
Expires: Tue, 26 Mar 2013 00:28:45 GMT 
Cache-Control: max-age=0, no-cache, no-store 
Pragma: no-cache 
Date: Tue, 26 Mar 2013 00:28:45 GMT 
Content-Length: 290 
Connection: keep-alive 
Set-Cookie: KEY=isbgvigbiwsb124252525252; Domain=www.website.com; Expires=Tue, 26-Mar-13 02:28:44 GMT; Path=/; HttpOnly 
Set-Cookie: session=12345566789:abc1231552662626262; Domain=www.website.com; Expires=Thu, 25-Apr-2013 00:28:43 GMT; Path=/ 


<login> 
    <success>1</success> 
    <player> 
    <id>1234567</id> 
    <AnotherId>123456</AnotherId> 
    <email>[email protected]</email> 
     <accountinformation> 
      <id>123456</id> 
      <name>namehere</name> 
      <number>1234360</number> 
     </accountinformation> 
    </player> 
</login> 

我想要检索的响应KEY的cookie。目前我的代码如下

//a cURL function would be here 
$result = curl_exec($ch); 

list($body, $split) = explode("\r\n\r\n", $result, 2); 
$arr = explode("\r\n", $body); 

$start = explode(":", $arr[10]);  
$end = explode(";", $start[1]); 
$INFO_I_NEED = $end[0];  

什么是更简单的方法来执行此操作?因为它需要为不同的解析区域完成3/4次。

+1

为它写一个方法?使用像XML这样的自描述结构? – Patashu 2013-03-26 00:26:32

+0

你建议这样的“方法”是什么? – 2013-03-26 00:27:04

+0

您可以给出一个您在$ result中获得的数据的示例,以及您在$ INFO_I_NEED中需要的部分? – Kara 2013-03-26 00:28:21

回答

1

看起来preg_match_all可能是你在找什么。使用this answer作为灵感尝试:

preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $m); 

然后,您可以编写一个函数:

function getCookies($result) { 
    preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $m); 
    return($m) 
} 

$result = curl_exec($ch); 
$cookiesArray = getCookies($result); 

函数的返回值将是所有Cookie值的数组。所以$cookiesArray将举行:

array (
    0 => 'KEY=isbgvigbiwsb124252525252', 
    1 => 'session=12345566789:abc1231552662626262', 
) 
0

把它放在一个函数内,所以你可以重复使用的时候需要的:

<?php 
//a cURL function would be here 
$result = curl_exec($ch); 

$INFO_I_NEED = myExplode($result); 

function myExplode($data){ 

    list($body, $split) = explode("\r\n\r\n", $result, 2); 
    $arr = explode("\r\n", $body); 

    $start = explode(":", $arr[10]);  
    $end = explode(";", $start[1]); 

    return($end[0]); 

} 
?>