由于微端要和服务器交互,而服务器又只有http协议的处理,所以需要用C++来模拟get或post请求。
这是使用windows api来模拟get请求的,使用到的库有“winhttp”,头文件有“winhttp.h”,下面的代码来源于http://msdn.microsoft.com:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
void
getRequest(){
DWORD
dwSize = 0;
DWORD
dwDownloaded = 0;
LPSTR
pszOutBuffer;
BOOL
bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
hSession = WinHttpOpen(L
"A WinHTTP Example Program/1.0"
,
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
if
(hSession)
hConnect = WinHttpConnect(hSession, L
"oschina.net"
,
INTERNET_DEFAULT_HTTP_PORT, 0);
if
(hConnect)
hRequest = WinHttpOpenRequest(hConnect, L
"GET"
,
L
"/search?q=python"
,
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0);
if
(hRequest)
bResults = WinHttpSendRequest(hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0, WINHTTP_NO_REQUEST_DATA, 0,
0, 0);
if
(bResults)
bResults = WinHttpReceiveResponse(hRequest, NULL);
if
(bResults)
{
do
{
dwSize = 0;
if
(!WinHttpQueryDataAvailable(hRequest, &dwSize))
printf
(
"Error %u in WinHttpQueryDataAvailable.\n"
,
GetLastError());
pszOutBuffer =
new
char
[dwSize+1];
ZeroMemory(pszOutBuffer, dwSize+1);
if
(!WinHttpReadData(hRequest, (
LPVOID
)pszOutBuffer,
dwSize, &dwDownloaded))
printf
(
"Error %u in WinHttpReadData.\n"
, GetLastError());
else
printf
(
"%s\n"
, pszOutBuffer);
delete
[] pszOutBuffer;
}
while
(dwSize > 0);
}
if
(!bResults)
printf
(
"Error %d has occurred.\n"
, GetLastError());
if
(hRequest) WinHttpCloseHandle(hRequest);
if
(hConnect) WinHttpCloseHandle(hConnect);
if
(hSession) WinHttpCloseHandle(hSession);
}
|
这段代码时模拟请求开源中国查询python相关信息的,亲测可用,做个记录方便以后查找。
地址:http://fastfood.sinaapp.com/?p=1250