WinInetで掲示板に書き込む方法


玄米  2005-09-03 03:11:11  No: 58837

続けて投稿しますが・・・
現在、プログラムから掲示板に毛着込むプログラムを作っているのですが
上手く結果が返ってきません
int UPLOAD(char *ServerName,char *ObjectName,char *RelationUrl)
{
/*ServerName サーバ名
 ObjectName CGIの名前
  RelationUrl そのCGIが置いてある場所*/

        HINTERNET hInternet;
        HINTERNET hHttpSession;
        HINTERNET hRequest;
        char szHeader[1000];
        char *Buf;
        char BufSizeText[100];
        DWORD BufSize;
        DWORD ReadSize;
        DWORD BufSizeTextSize = 1000;
        TCHAR str[100];
        char szOption[1000];
        BOOL bResult;
        
        fstream FILE("test.html",std::ios::out);

        /* WININET初期化 */
        hInternet = InternetOpen(
                "Auto Machine Program",
                INTERNET_OPEN_TYPE_PRECONFIG,
                NULL,
                NULL,
                0);

        if(hInternet == NULL){
                MessageBox(NULL,"InternetOpen失敗",NULL,NULL);
                return false;
        }

        hHttpSession = InternetConnect(
                hInternet,
                ServerName,
                INTERNET_DEFAULT_HTTP_PORT,
                NULL,
                NULL,
                INTERNET_SERVICE_HTTP,
                0,
                0);

        if(hHttpSession == NULL){
                MessageBox(NULL,"InternetConnect失敗",NULL,NULL);
                return false;
        }

        MessageBox(NULL,"成功",NULL,NULL);
        

        hRequest = HttpOpenRequest(
                hHttpSession,
                "POST",
                ObjectName,
                NULL,
                RelationUrl,
                NULL,
                0,
                0);
        
        if(hRequest == NULL){
                MessageBox(NULL,"HttpOpenRequest失敗",NULL,NULL);
                return false;
        }

        lstrcpy(szHeader, "Content-Type: application/x-www-form-urlencoded");
        lstrcpy(szOption, "heart=1&x0=1&y0=2&x1=3&y1=4");
    bResult = HttpSendRequest(hRequest,
            szHeader, lstrlen(szHeader),
            szOption, lstrlen(szOption));
        

        if(bResult == true){
                MessageBox(NULL,"成功?",NULL,NULL);
        }
        else if(bResult == false)
        {
                wsprintf(str,"%d",GetLastError());
                MessageBox(NULL,str,NULL,NULL);
        }

        bResult = HttpQueryInfo(
                hRequest,
                HTTP_QUERY_CONTENT_LENGTH,
                BufSizeText,
                &BufSizeTextSize, 
                NULL);
                
        if(!bResult){
                MessageBox(NULL,"HttpQueryInfo失敗",NULL,NULL);
                wsprintf(str,"%d",GetLastError());
                MessageBox(NULL,str,NULL,NULL);
                return 0;
        }

        BufSize = atol(BufSizeText);
        Buf = new char[BufSize];

        bResult = InternetReadFile(
                hRequest,
                Buf,
                BufSize,
                &ReadSize);
        if(!bResult){
                MessageBox(NULL,"InternetReadFile失敗",NULL,NULL);
                return 0;
        }

        FILE << Buf << std::endl;

        MessageBox(NULL,"完了",NULL,NULL);

        InternetCloseHandle(hInternet);
        InternetCloseHandle(hHttpSession);
        InternetCloseHandle(hRequest);

        delete Buf;

}

以上がソースコードです
おかしなところがあれば、教えていただけないでしょうか
よろしくお願いします


YuO  2005-09-03 09:56:36  No: 58838

まぁ,突っ込み所は色々ありそうなわけですが……。

> 現在、プログラムから掲示板に毛着込むプログラムを作っているのですが
> 上手く結果が返ってきません

# 毛着込む?
「上手く結果が返ってきません」というのはあなたの感想でしかありません。
ちゃんと現象を説明してください。

つまり,
・どの場所で自分の予期した物と異なる結果が現れているのか
・予期した結果はどのようなものか
・実際の結果はどのようなものなのか
・関連する変数の値はどうなっていたのか
を書いてください。

でもって,ざっと見たところだと,
・new[]で確保したオブジェクトをdeleteで解放している
・開いたハンドルを閉じていないことがある
・BOOL型の値に対して,bool型のtrue/falseで比較している
・戻り値の型はint型なのに,bool型を返している
・UPLOAD関数の最後にreturn文がない
ってのは見つけました。
# UPLOADとかFILEなんていう関数名/変数名は気持ち悪いが,問題にはならないので棚上げ。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加