wininetでPOSTで値を渡せません
winnetを使ってPOST形式でサーバにパラメータを渡そうとしていますが、パラメータが渡せずに困っています。
HttpOpenRequestかHttpSendRequestがおかしいと思うのですが、自分では見当がつきません。
よければ何処に問題があるのか教えてください。
環境:vc++2005
int DoHttpRequest( void )
{
HINTERNET hInet, hSession, hRequest;
DWORD dwTotal = 0;
wchar_t param[] = L"type=1";
wchar_t header[] = L"Content-Type: application/x-www-form-urlencoded";
wchar_t accept[] = L"Accept: */*"; // 使ってない
BOOL flag;
Console::WriteLine( "Http接続START" );
//インターネット(WinInet)初期化
hInet = InternetOpen( NULL,
INTERNET_OPEN_TYPE_PRECONFIG,
NULL, NULL, 0);
if (hInet == NULL) {
Console::WriteLine( "エラー1" );
return -1;
}
// サーバへ接続
hSession = InternetConnect( hInet, L"192.168.11.25", 9999,
NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0 );
if( hSession == NULL ) {
Console::WriteLine( "エラー2" );
InternetCloseHandle(hInet);
return -1;
}
//HTTPセッションの開始, 指定のURLオープン
hRequest = HttpOpenRequest( hSession, L"POST", L"/sample/service.php",
NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0 );
if (hRequest == NULL) {
Console::WriteLine( "エラー3" );
InternetCloseHandle(hSession);
InternetCloseHandle(hInet);
return -1;
}
// 送信
flag = HttpSendRequest( hRequest, header, wcslen( header ), param, wcslen( param ));
if( flag == FALSE ) {
Console::WriteLine( "エラー4" );
InternetCloseHandle(hRequest);
InternetCloseHandle(hSession);
InternetCloseHandle(hInet);
return -1;
}
//インターネットハンドルの解放
InternetCloseHandle( hRequest );
InternetCloseHandle( hSession );
InternetCloseHandle( hInet );
Console::WriteLine( "Http接続END" );
return 0;
}
お礼
ご回答ありがとうございます。 「HttpSendRequest 997」にいろいろキーワードを加えて何度もググっていたんですけど、 「HttpSendRequest」は検索ワードとして邪魔だったみたいですね。 再度試すと当Q&Aが1件目にでました。 おっしゃる通り「InternetOpen」のフラグで「INTERNET_FLAG_ASYNC」を指定していました。 私の見たサイトでは非同期ではなく「サーバーから取得します」とコメントがあったので こちらを指定していました。試しに0で実行してみると、期待した動作になりました。 ありがとうございました。