先看一个简单的GET示例
#include <Windows.h>
#include <winhttp.h>
#include <stdio.h>
int main()
{
HINTERNET sessionHandle = WinHttpOpen(L"WinHttp Example", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, );
if (sessionHandle)
{
HINTERNET connectionHandle = WinHttpConnect(sessionHandle, L"example.com", INTERNET_DEFAULT_HTTP_PORT, );
if (connectionHandle)
{
HINTERNET requestHandle = WinHttpOpenRequest(connectionHandle, L"GET", L"", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, );
if (requestHandle)
{
BOOL success = WinHttpSendRequest(requestHandle, WINHTTP_NO_ADDITIONAL_HEADERS, , WINHTTP_NO_REQUEST_DATA, , , );
if (success)
{
success = WinHttpReceiveResponse(requestHandle, NULL);
if (success)
{
DWORD dwSize;
do
{
dwSize = ;
LPSTR pszOutBuffer;
DWORD dwDownloaded = ;
if (!WinHttpQueryDataAvailable(requestHandle, &dwSize))
{
printf("Error %u in WinHttpQueryDataAvailable.\n", GetLastError());
break;
}
// No more available data.
if (!dwSize)
break;
// Allocate space for the buffer.
pszOutBuffer = new char[dwSize + ];
if (!pszOutBuffer)
{
printf("Out of memory\n");
break;
}
// Read the Data.
ZeroMemory(pszOutBuffer, dwSize + );
if (!WinHttpReadData(requestHandle, (LPVOID)pszOutBuffer, dwSize, &dwDownloaded))
{
printf("Error %u in WinHttpReadData.\n", GetLastError());
}
else
{
printf("%s", pszOutBuffer);
}
// Free the memory allocated to the buffer.
delete[] pszOutBuffer;
// This condition should never be reached since WinHttpQueryDataAvailable
// reported that there are bits to read.
if (!dwDownloaded)
break;
} while (dwSize > );
}
else
{
// Report any errors.
printf("Error %d has occurred.\n", GetLastError());
}
}
else
{
printf("Request failed\n");
}
WinHttpCloseHandle(requestHandle);
}
else
{
printf("Invalid request handle\n");
}
WinHttpCloseHandle(connectionHandle);
}
else
{
printf("Invalid connection handle\n");
}
WinHttpCloseHandle(sessionHandle);
}
else
{
printf("Invalid WinHTTP-session handle\n");
}
system("pause");
return ;
}
有没有一种要崩溃的节奏仅从example.com获取网页代码,就要写约90行的代码
更麻烦的不是代码量的问题,而是这些API暴露了太多的细节(当然,暴露细节的好处是不限制开发员的思想,根据需求灵活编码)。很多时候,我们并不需要考虑那么多的细节
还没有评论呢,快来抢沙发~