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;
}
这段代码展示了在C++中使用MFC进行HTTP请求的处理。它创建了一个`CInternetSession`对象,连接到指定的主机,并尝试获取资源。如果发送请求失败,会抛出一个异常。此外,根据HTTP状态码,它能识别并处理不同的错误情况,如403禁止访问、404未找到和500内部服务器错误。
504

被折叠的 条评论
为什么被折叠?



