サーバーは HTTP ヘッダーとバイナリ ファイルを返します。このようなもの:
HTTP/1.1 200 OK
Date: Thu, 28 Jun 2012 22:11:14 GMT
Server: Apache/2.2.3 (Red Hat)
Set-Cookie: JSESSIONID=blabla; Path=/
Pragma: no-cache
Cache-Control: must-revalidate, no-store
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-disposition: inline; filename="foo.pdf"
Content-Length: 6231119
Connection: close
Content-Type: application/pdf
%PDF-1.6
%âãÏÓ
5989 0 obj
<</Linearized 1/L 6231119/O 5992/E 371504/N 1498/T 6111290/H [ 55176 6052]>>
endobj
xref
5989 2744
0000000016 00000 n
0000061228 00000 n
0000061378 00000 n
バイナリファイルだけをコピーしたい。しかし、ヘッダー部分がいつ終了したかを知るにはどうすればよいでしょうか? 行に a が含まれているかどうかをチェックしようとしまし\r\n\r\n
たが、この標準はサーバーの応答には適用されず、クライアントにのみ適用されるようです。これは与えられました:
Content-disposition: inline; filename="foo.pdf"
Content-Length: 6231119
Connection: close
Content-Type: application/pdf
%PDF-1.6
%âãÏÓ
5989 0 obj
<</Linearized 1/L 6231119/O 5992/E 371504/N 1498/T 6111290/H [ 55176 6052]>>
endobj
xref
5989 2744
0000000016 00000 n
Cコードは次のとおりです。
while((readed = recv(sock, buffer, 128, 0)) > 0) {
if(isnheader == 0 && strstr(buffer, "\r\n\r\n") != NULL)
isnheader = 1;
if(isnheader)
fwrite(buffer, 1, readed, fp);
}
アップデート:
continue
if ステートメントにコントロールを入れます。
if(isnheader == 0 && strstr(buffer, "\r\n\r\n") != NULL) {
isnheader = 1;
continue;
}
まあ、それは期待どおりに動作します。しかし、@Alnitak が述べたように、安全ではありません。