2011-01-02 18 views
11

私は周りを見渡してきましたが、libcurl(これはhttpの標準Cライブラリと思われる)のヘッダを一般的に解析できる手段はないようです。libcurlでHTTPヘッダーをどのように解析しますか?

私が見つけた最も近いものはメーリングリストの投稿で、誰かが他の人にメーリングリストのアーカイブを検索するよう提案したものです。

setoptでlibcurlによって提供される唯一の機能は、CURLOPT_HEADERFUNCTIONです。これは、一度に1行ずつヘッダー応答を供給します。

これは、headers can span multiple linesを考えると、あまりにも原始的すぎるようです。理想的には、これは一度正しく(好ましくはライブラリ自体によって)一度行うべきであり、アプリケーション開発者が常に再考する必要はありません。

編集

動作していないナイーブなものの例として、libcurlのコード例と、それは解析できないことを適切に形成されたHTTP応答で、次の要点を参照してください。https://gist.github.com/762954

+0

私はあなたと一緒です。不幸なことに、libcurlは、 'CURLOPT_HEADERFUNCTION'がなく、' CURLOPT_HEADER'がtrueに設定されていてもヘッダ行の処理を行うようです。すなわち、それはかなり役に立たないレキシングをたくさんしている。 – jberryman

答えて

11

1年以上経過しているので、これを「手動で」終了します。または:あなたはcURLの問題を抱えている場合は

、私はあなたが複数行のヘッダを持っているし、それぞれを解析する必要があります

、あなたの息子のために悪い感じ。

+5

libcurlはオープンソースプロジェクトです。それはボランティアの貢献に依存していることを意味します。あなたは1人になることができます! –

7

libcurlの読み取りヘッダー全体を1つの完全な行としてコールバックに送信します。

"続き" HTTPヘッダー行はHTTP 1.1 RFC 7230ファミリでは許可されておらず、その前にも事実上消滅しました。

+4

マルチラインヘッダーは珍しいかもしれませんが、有効です。アプリケーションが実行された場合、アプリケーションが完全に中断しないようにしたいと考えています。 – Dustin

+1

これはHTTPbisでは許可されていません。これはHTTP仕様の保留中のアップデートです...今日はサポートが追加されました。しかし、それがあなたの試合であれば確かに進んでください。 –

+0

"libcurlはヘッダ全体を読み込み、コールバックに1行の完全な行として送ります。"私はそれを読むとこれは正しくありません。 libcurlは、ボディセクションに達するまで、一度に1行(行ブレーク文字を含み、最後の '\ r \ n 'を含む)をコールバックに送信するようです。 @Dustinが指摘しているように、クライアントが応答を得ているサーバを完全に制御できなければ、これはむしろ役に立たない。 – jberryman

関連する問題