找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 186|回复: 0

[源码] 之前分享的联网取北京现行时间戳耗时在100多毫秒 下面分享个更快的给大家30毫秒左右

[复制链接]

15

主题

16

回帖

447

积分

中级会员

积分
447
QQ
发表于 5 天前 | 显示全部楼层 |阅读模式
#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;
        #嵌入代码结束

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|炫语言 | 炫彩界面库 | 用户所需, 正是我所做! ( 鄂ICP备2023014763号-1 )

GMT+8, 2026-1-30 21:45 , Processed in 0.084998 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表