|
|
#include <chrono>
#include <winhttp.h>
#include <iomanip>
函数 长整型 取北京现行时间戳(逻辑型 是否13位 = 假)
#嵌入代码
HINTERNET hSession = WinHttpOpen(L"TimeClient/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
if (!hSession) return -1;
WinHttpSetTimeouts(hSession, 3000, 3000, 3000, 3000);
HINTERNET hConnect = WinHttpConnect(hSession, L"www.baidu.com",
INTERNET_DEFAULT_HTTP_PORT, 0);
if (!hConnect){WinHttpCloseHandle(hSession); return -1;}
HINTERNET hRequest = WinHttpOpenRequest(hConnect, L"HEAD", L"/",
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
if (!hRequest) {
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return -1;
}
if (!WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0,
WINHTTP_NO_REQUEST_DATA, 0, 0, 0)){
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return -1;
}
if (!WinHttpReceiveResponse(hRequest, NULL)) {
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return -1;
}
wchar_t dateHeader[256] = {0};
DWORD dateHeaderSize = sizeof(dateHeader);
if (WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_DATE,
WINHTTP_HEADER_NAME_BY_INDEX,
dateHeader, &dateHeaderSize,
WINHTTP_NO_HEADER_INDEX)){
const wchar_t *format = L"%a, %d %b %Y %H:%M:%S GMT";
std::tm tm = {};
std::wistringstream ss(dateHeader);
ss >> std::get_time(&tm, format);
if (!ss.fail()){
tm.tm_isdst = 0;
time_t gmtTimestamp = _mkgmtime(&tm);
if (gmtTimestamp != -1){
gmtTimestamp += 8 * 3600;
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
if (是否13位){return gmtTimestamp * 1000;}
return gmtTimestamp;}}}
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
return -1;
#嵌入代码结束
|
|