InternetReadFile関数を使わずに
webサイトのソースコードを取得するプログラムを作っているのですが・・・
GETコマンドを送信するとソースコード以外にもヘッダもついてきます。
どうすればいいのか考えた挙句、
ヘッダ部とボディ部との間に改行ができるという特徴を利用して
ボディ部を抽出することにしました。
( もっと簡単な方法があるのであれば教えてください。 )
テストプログラムを作ってみたのですが、
かなりひどく、動作がおかしいです。
そのため みなさまからアドバイスまたはおおまかなプログラムの流れを
教えていただきたいです。
ちなみにGETコマンドを送るソースコードです。
動作確認済みです。
# pragma comment(lib, "ws2_32.lib")
#include <stdio.h>
#include <winsock2.h>
int main( void )
{
int sock, ret;
struct sockaddr_in addr;
WSADATA wsadata;
WSAStartup( 0x0101, &wsadata );
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("125.172.198.97");
addr.sin_port = htons(80);
sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
ret = connect( sock, (struct sockaddr *)&addr, sizeof addr );
if ( ret < 0 ) {
printf( "can't open http port\n" );
return 0;
}
char get[] = "GET /~yamada_mama_papa/index.html HTTP/1.0\r\nHost: s1.muryo.etowns.net\r\n\r\n";
int n;
n = send( sock, get, strlen(get), 0 );
printf( "send: %d\n", n );
char buf[256];
printf( "http recv data\n" );
printf( "=============================\n" );
while ( 1 ) {
n = recv( sock, buf, sizeof(buf)-1, 0 );
if ( n <= 0 ) break;
buf[ n ] = '\0';
printf( buf );
}
closesocket( sock );
}