BIO

2016-10-24 14 views
1
を使用してSSL応答の本文の読み方

こんにちは、私はTwitterのコンソールアプリケーションを作成しようとしている問題を持っています。レスポンスを得るときに私はそれにいくつかのスラッシュを持っています。 ここに私のコードは次のとおりです。BIO

char new_request[1024] = "GET /1.1/statuses/user_timeline.json?count=4&screen_name=twitterapi HTTP/1.1\r\nHost: api.twitter.com\r\nUser-Agent: twitter-terminal-app$ 
strcat(new_request, bearer); 
strcat(new_request, "\r\nAccept-Encoding: gzip\r\n\r\n\0"); 
BIO_write(bio, new_request, strlen(new_request)); 

printf("%s\n", new_request); 

p = BIO_read(bio, ans, 2047); // Getting header 
ans[p] = 0; 
printf("%s\n", ans); 

char ans2[100000] = ""; 

p = BIO_read(bio, ans2, 10000); // Getting body 
BIO_should_retry(bio); 

FILE *file = fopen("result.txt", "w+"); 
fputs(ans2, file); 

printf("%s\n%i\n", ans2, p); 

私は身体を持っている答えは以下のようになります。

▒▒is▒HǿJ▒_ ▒▒▒▒V▒▒▒▒.▒▒T▒▒ f ▒Tmmm ▒P▒1▒|▒}▒%▒▒▒▒▒▒▒▒F%▒C*;▒▒D/#▒L▒▒▒ ▒?L▒A▒▒▒N▒▒ĝ▒▒▒▒$▒El▒▒▒▒X▒▒B0▒〜%▒▒5▒˲@ Y)GY▒ctz▒h&-▒▒▒O> AG▒▒▒l6b▒z▒:K ▒T▒\▒▒2+▒b▒H▒& B▒▒▒B▒qV▒ ▒▒▒▒▒ ▒▒a_▒l▒?▒▒▒▒W▒▒u%▒▒▒▒1M▒v▒▒L▒▒

多分答えは何とかエンコードされています問題。セルフdev.twitter.comにしようとしましたが、何の答えも見つかりませんでした。 BIO_read()の代わりにBIO_gets()を使用すると、答えは-2になります。何か案は?

+0

あなたが進またはbase64の可能性が最も高いたいと思うので、それは、バイナリとしてエンコードされるようになります.... –

+0

あなたが* 2回目のリードで得たものです。*最初の読み取りがすべてお読みになることを保証し、ここでは何もありませんヘッダー。それで、ここでは、あなたが二度目の読書で得たものが身体であることを保証するものは何もありません。ここではヘッダーのどれかに少しでも注意を払う必要はありません。例えば、 'Content-encoding'です。 HTTPまたはHTTPSを自分で実装しないでください。あなたが考えるより複雑です。既存のライブラリを使用します。私がやっている – EJP

+0

プロジェクトは、自分cでHTTPの実装については、実際にある:答えのため –

答えて

3
strcat(new_request, "\r\nAccept-Encoding: gzip\r\n\r\n\0"); 
... 
p = BIO_read(bio, ans, 2047); // Getting header 
... 
p = BIO_read(bio, ans2, 10000); // Getting body 

...たぶん答えは何とか

エンコードされているあなたは、あなたがgzipで圧縮されたデータをサポートし、あなたのHTTPリクエストに宣言したとサーバがあなたに圧縮されたデータを送信している理由です。あなたが読んで、HTTPレスポンスヘッダを無視するが、実際にそれを見てみましょうだけでなく、場合、あなたはおそらく気付くだろう:

は別に明示的に圧縮されたデータを許すから
Content-Encoding: gzip 

あなたはHTTP/1.1リクエストを行っています。つまり、chunked transfer encodingも処理できる必要があります。 HTTP/1.1はまた、あなたが適切に応答が本当に代わり接続端に依存するので終わる場所を見つけるために、ヘッダーを解析する必要がありますので、デフォルトでは接続が永続的であることをことを意味しています。また、固定サイズのヘッダーに依存することも、別のBIO_read呼び出しでヘッダーと本文を読み取ることもできません。たとえば、本文に複数の読み込みが必要な場合や、ヘッダーの読み込みに既に本文が含まれている可能性があります。

あなたが本当に自分自身が、私はあなたがより良いこれを適切に実装して、既存のライブラリを使用することをお勧めし、これらすべての問題に対処したいので、偶然に、確実ではなく、あなたに正しい応答を取得しない限り


あなたの代わりに、これは私はあなたがすなわち wikipedia entryを読むことによって、HTTPについての詳細を学ぶことから始め、その後、そこに参照されるすべての基準を続けるお勧めしますどのように行われるかを学びたいのであれば。 HTTP/1.0よりも簡単なので、HTTP/1.0で始めることをお勧めします。

+0

感謝。ポイントは、httpがどのように動作しているかを知ることです –

関連する問題