2016-08-08 4 views
-1

Cで単純なクライアントコードを実行してPOSTを実行し、サーバーに接続してデータストリームを読み取ります。現在、私はrecv()で受信した完全な応答を印刷しており、それ以降の使用のために解析する必要があります。データストリームを読む前に、サーバーからHTTPステータスコード(200,400,401など)が何であるかを知りたい。私はヘッダーで同じになっています。ヘッダーを読む前にHTTPコードを取得する方法はありますか?Cでrecv()から抽出パラメータとペイロードを読み取る方法は?

ヘッドパラメータとペイロードを読み込むベストプラクティスは何ですか?私は検索しましたが、私が得た答えは '\ r \ n'の順序を読み、論理を適用することです。もっと良い方法はありますか?

私はこのコードをテストするためにUbuntuシステムを使用しています。以下は、印刷された応答である:

<p style="color:blue;">HTTP/1.1 401 Unauthorized 
Server: Apache-Coyote/1.1 
Content-Type: application/json 
Content-Length: 69 
Date: Mon, 08 Aug 2016 09:46:46 GMT 
</p> 
<p style="color:blue;">"You are not a authorized user to access this resource. Access denied." 
+0

'ヘッダーを読み取る前にHTTPコードを取得する方法はありますか?すでに意味がありません。 HTTPステータスコードは* in *ヘッダです。あなたが求めているものが不明であるか、または利用可能な作業ライブラリがすでにたくさんある場合にクライアント側のHTTPを再実装する理由。 HTTPを実装するには、TCP、ソケット、およびRFC 2616とその後継の知識が必要です。 – EJP

答えて

0

recv()は、この場合には、ソケットからTCP/IPを生データを受け取り、私は考えます。 TCP/IPは低レベルプロトコルであり、HTTPステータスコードの概念を持たないため、HTTPデータは意味を持たないバイトだけです。

実際には、データを読み取ってHTTPプロトコルデータとして解釈してからステータスコードを取得する必要があります。


TCP/IPプロトコルとHTTPプロトコルの懸念事項を分ける必要があります。あなたが習得したい場合は、簡単なHTTPクライアントライブラリを作成するか、制作品質コードが必要な場合は既存のライブラリ(libcurlが念頭に置かれます)を見つけることができます。その後、ライブラリを使用してHTTPプロトコル処理を処理し、アプリケーションコードから低レベルのTCP/IPトラフィックを隠します。

関連する問題