2011-11-10 69 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