2011-07-31 13 views
1

私は過去の日にCURLを使いこなしてきました。戻りデータを解析する方法を理解できないようです。私はレスポンスからデータを抽出するためにREGEXを書くことができますが、おそらく欠けている機能があるようです。私が試してやりたいことはここにあります。私は別のドメインにPOSTを行い、バック3つの事 1.レスポンスヘッダ 2.応答データ 3セッションクッキーPHP CURLデータの解析

を取得したい

は、私は、これらの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

はいこの種類の回答は私の質問です。しかしそれは方法ではありません。私はまだ応答ヘッダーを取得する方法を知りませんが、本体を返すことはまだありません。他の部分は、リクエストヘッダーにあるクッキーです。それはどうやって見えるのですか? – DvideBy0

+0

私はあなたを愛しています。私は決してmb_substrを使ったことがないばかです。:) – DvideBy0

3

カールドキュメントによると:

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

ので、ヘッダはcurl_execコマンドの出力に加算されます。私はこれを吐き出してきましたが、ヘッダーを応答本体から別々に取得する方法はありません。圧縮出力の読み込みを開始すると悪化します(圧縮された、圧縮された)

これは、1つの大きな文字列であり、配列ではないので、例えばcurl_getinfoのような形式配列。これらの2までを分割することを

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

ができますが、レスポンスヘッダの文字列ではなく、そんなに多く参考になる配列で終わる:

最も簡単には、これを行うことです。これからarrrayを作成することはそれほど明白ではありません。たとえば正規表現では/(\ w)\ sのような単純なものに分割できないので、(\ w)/ as ':'は特定のフィールド。カールがヘッダーを別々に提供するなら、それは非常に涼しいですが、私がドキュメントを読む限り、そこにはないようです。

セッションクッキーについては、CURLOPT_COOKIESESSION = trueオプションを使用する必要があると思われますが、私はこれまで専門的に使用する必要がないため、クッキーに関する経験はほとんどありません。幸運

更新:あなたがpeclがない場合、http://php.net/manual/en/function.http-parse-headers.phpまたはユーザーコメントセクションからカスタム関数で解析できるヘッダー。