1

私は過去 1 日間 CURL をいじっていましたが、返されたデータを解析する方法がわかりません。REGEX を記述して応答からデータを抽出できることはわかっていますが、おそらく不足している機能があるようです。これが私が試してやりたいことです。

別のドメインに POST して、3 つのものを取得したい 1. 応答ヘッダー 2. 応答データ 3. セッション Cookie

これら3つのものを別々に戻す方法はありますか? 今は、応答ヘッダーと応答データを含むプレーン テキストの応答を返すだけです。次のようなことができるようになりたいです

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

カールはこのようなものを提供しますか?

4

2 に答える 2

5

私が答えたように:

ヘッダー CURLOPT_HEADER を要求したときに投稿データが返されませんでした。PHP カール

追加:

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]);
于 2011-07-31T19:20:40.137 に答える
3

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

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

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

その上、これは配列ではなく 1 つの大きな文字列であるため、たとえば curl_getinfo のような形式のヘッダーが必要な場合は、配列を返します。

最も簡単なのはこれを行うことです:

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

それはこれら2つを分割しますが、応答ヘッダーの文字列になり、はるかに役立つ配列ではなくなります. たとえば、/(\w)\s:(\w)/ のような単純なものを分割できないため、正規表現を使用しても、そこから配列を作成することはそれほど明白ではありません。特定のフィールドで「:」が発生する可能性があるためです。 . curl がヘッダーを個別に提供するのは非常にクールですが、ドキュメントを確認する限り、そこにはないようです。

セッション Cookie に関しては、そのためには CURLOPT_COOKIESESSION = true オプションを使用する必要があると思いますが、専門家が Cookie を使用する必要がほとんどないため、Cookie の経験はほとんどありません。幸運を

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

于 2012-10-03T14:24:41.203 に答える