Как запросить веб-сервер на основе CGI из приложения, написанного на MFC (MSVC 2008), и обработать результат? - PullRequest
0 голосов
/ 20 мая 2010

Я изучаю возможность запроса веб-страницы, в конце которой запущен CGI-скрипт, со строкой поиска (скажем, в форме http://sw.mycompany.com/~tools/cgi-bin/script.cgi?param1=value1&param2=value2&param3=value3) и отображением результата в моем приложении. (после должной обработки конечно). Мое приложение написано на MFC C ++, и я должен признаться, что никогда раньше не пытался ничего связанного с сетевым программированием.

Разве то, что я пытаюсь сделать, неосуществимо? Если нет, может ли кто-нибудь указать мне на ресурсы, на которые я должен обратить внимание, чтобы пойти по этому поводу?

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 мая 2010
CInternetSession internet_session;

CHttpConnection* connection = NULL;
CHttpFile* file = NULL;
TRY {
    connection = internet_session.GetHttpConnection("www.somehost.com", (INTERNET_PORT)80);
    // URI needs to be a relative path here
    file = connection->OpenRequest(CHttpConnection::HTTP_VERB_GET, "/some/file/on/server", NULL, 1, NULL, "HTTP/1.1");
    BOOL send_result = file->SendRequest();
    if (send_result == FALSE) {
        // When can this happen? Only when connection fails between this and the previous call.
        // Need to use ugly MFC exception stuff because OpenRequest et al. use it.
        ::AfxThrowInternetException(internet_session.GetContext());
    }
}
CATCH (CInternetException, e) {
    if (file) {
        file->Close();
    }
    delete connection;
    file = NULL;
    connection = NULL;
}
END_CATCH

if (!file) {
    delete file;
    delete connection;
    return false;
}

DWORD status_code;
file->QueryInfoStatusCode(status_code);
if (status_code != 200) {
    CString result;
    if (status_code == 403) {
        result.Format("Authentication error (HTTP 403)");
    } else if (status_code == 404) {
        result.Format("Object not found (HTTP 404)");
    } else if (status_code == 500) {
        result.Format("Application error: malformed request (HTTP 500)");
    } else {
        result.Format("Got unsupported HTTP status code %d", status_code);
    }
    file->Close();
    delete file;
    delete connection;
    return false;
}
1 голос
/ 20 мая 2010

MFC поддерживает создание клиента Http. Подробнее см. статью в MSDN.

Этот вопрос также может быть полезен.

...