php获取网络北京时间,C++ WinHttp简单get访问获取北京时间

下面这个程序是通过WinHttp访问, 获取北京时间网址 https://www.citext.cn/GetTime.php 得到这个网址的源码.

话不多说上测试图:

2c18cdc0b947e753ad292f6b0ff29b3d.png简单winhttp测试图

下面放上代码 给喜欢折腾的人去研究 我就不多打字了 代码中有少许注释 希望能帮到你!

#include

#include

#include

#include

#pragma comment(lib, "winhttp.lib")

using namespace std;

int main()

{

HINTERNET hSession = NULL;

HINTERNET hConnect = NULL;

HINTERNET hRequest = NULL;

//1. 初始化一个WinHTTP-session句柄,参数1为此句柄的名称

hSession = WinHttpOpen(L"WinHTTP Example/1.0",

WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,

WINHTTP_NO_PROXY_NAME,

WINHTTP_NO_PROXY_BYPASS, 0);

if (hSession == NULL) {

cout << "Error:Open session failed: " << GetLastError() << endl;

exit(0);

}

//2. 通过上述句柄连接到服务器,需要指定服务器IP和端口号 INTERNET_DEFAULT_HTTP_PORT:80。若连接成功,返回的hConnect句柄不为NULL

hConnect = WinHttpConnect(hSession, L"www.citext.cn", INTERNET_DEFAULT_HTTP_PORT, 0);

if (hConnect == NULL) {

cout << "Error:Connect failed: " << GetLastError() << endl;

exit(0);

}

//3. 通过hConnect句柄创建一个hRequest句柄,用于发送数据与读取从服务器返回的数据。

hRequest = WinHttpOpenRequest(hConnect, L"GET", L"GetTime.php", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);

//其中参数2表示请求方式,此处为Get;参数3:给定Get的具体地址,如这里的具体地址为https://www.citext.cn/GetTime.php

if (hRequest == NULL) {

cout << "Error:OpenRequest failed: " << GetLastError() << endl;

exit(0);

}

BOOL bResults;

bResults = WinHttpSendRequest(hRequest,

WINHTTP_NO_ADDITIONAL_HEADERS,

0, WINHTTP_NO_REQUEST_DATA, 0,

0, 0);

if (!bResults){

cout << "Error:SendRequest failed: " << GetLastError() << endl;

exit(0);

}

else{

//(3) 发送请求成功则准备接受服务器的response。注意:在使用 WinHttpQueryDataAvailable和WinHttpReadData前必须使用WinHttpReceiveResponse才能access服务器返回的数据

bResults = WinHttpReceiveResponse(hRequest, NULL);

}

LPVOID lpHeaderBuffer = NULL;

DWORD dwSize = 0;

//4-3. 获取服务器返回数据

LPSTR pszOutBuffer = NULL;

DWORD dwDownloaded = 0; //实际收取的字符数

wchar_t *pwText = NULL;

if (bResults)

{

do

{

//(1) 获取返回数据的大小(以字节为单位)

dwSize = 0;

if (!WinHttpQueryDataAvailable(hRequest, &dwSize)){

cout << "Error:WinHttpQueryDataAvailable failed:" << GetLastError() << endl;

break;

}

if (!dwSize) break; //数据大小为0

//(2) 根据返回数据的长度为buffer申请内存空间

pszOutBuffer = new char[dwSize + 1];

if (!pszOutBuffer){

cout << "Out of memory." << endl;

break;

}

ZeroMemory(pszOutBuffer, dwSize + 1); //将buffer置0

//(3) 通过WinHttpReadData读取服务器的返回数据

if (!WinHttpReadData(hRequest, pszOutBuffer, dwSize, &dwDownloaded)){

cout << "Error:WinHttpQueryDataAvailable failed:" << GetLastError() << endl;

}

if (!dwDownloaded)

break;

} while (dwSize > 0);

//4-4. 将返回数据转换成UTF8

DWORD dwNum = MultiByteToWideChar(CP_ACP, 0, pszOutBuffer, -1, NULL, 0); //返回原始ASCII码的字符数目

pwText = new wchar_t[dwNum]; //根据ASCII码的字符数分配UTF8的空间

MultiByteToWideChar(CP_UTF8, 0, pszOutBuffer, -1, pwText, dwNum); //将ASCII码转换成UTF8

printf("\ncitext.cn返回时间: %S\n\n", pwText);

}

//5. 依次关闭request,connect,session句柄

if (hRequest) WinHttpCloseHandle(hRequest);

if (hConnect) WinHttpCloseHandle(hConnect);

if (hSession) WinHttpCloseHandle(hSession);

return 0;

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值