2011-11-10 45 views
1

我使用PHP http_post_data()调用将数据发送到一个CakePHP的controller.I做这样的:从http_post_data提取响应主体在PHP

$response=http_post_data($url, $xml_data_encoded); 

数据到达确定的目标和我一个响应持有的响应状态。在我的情况下,状态是数字1,这意味着-data交付ok.As你可以从下面的代码中看到我不仅获得状态号码(这是在消息的底部),但也整个http post header.How我可以从标题代码剥离此消息,以便最终响应消息只包含状态号?

HTTP/1.1 100 Continue 
HTTP/1.1 200 OK 
Date: Thu, 10 Nov 2011 08:34:15 GMT 
Server: Apache/2.2.17 (Ubuntu) 
X-Powered-By: PHP/5.3.5-1ubuntu7.3 
Set-Cookie: CAKEPHP=xxxxxxxxxxxxxxxx; expires=Fri, 18-Nov-2011 16:34:15 GMT;  path=/XXXXXXXXXX/xxxxxxxx 
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM" 
Vary: Accept-Encoding 
Content-Length: 19 
Content-Type: text/html 

1 

顺便说一句,我也试过这样:

HttpMessage::getBody(http_post_data($url, $xml_data_encoded)); 

,并没有得到回应的。 任何帮助将不胜感激。

+0

你只想要'1'在底部? – Mob

+0

这是正确的。 –

回答

2
$response = http_post_data($url, $data); 
preg_match_all('~HTTP/1\.[01]\s(\d{3})~', $response, $codes); 

$codes将存储所有匹配项。只需print_r阵列并查找所需的键。

+0

也看看'http_parse_headers'函数。它会在数组中存储''status''键,所以你可以直接使用它,或者preg_match来获得状态码。 –

+0

对不起取消选择你的​​答案,但它似乎不work.print_r()的$代码只返回响应头的第一行。问题仍然没有解决 –

+0

哦,对不起。 Preg_match只搜索第一个匹配项。使用'preg_match_all'来匹配每个可能的字符串。 –

2

而不是一个正则表达式,你可以使用http_parse_message

$response = http_parse_message(http_post_data($url, $data)); 
print $response->body; 
+0

或者仅仅是CakePHP的HttpSocket类 – mark