首页 > 编程语言 >c++通过http协议校时

c++通过http协议校时

时间:2023-02-14 15:55:21浏览次数:43  
标签:http setopt c++ char easy 校时 curl CURLOPT size

由于IP黑白名单的限制,我们能访问的ip和域名资源非常有限,现将通过http协议授时方法整理如下:

 

#include <cstdio>
#include <string.h>
#include <curl/curl.h>
#include <iostream>

bool GetNetWorkingTime(const char* httpurl = "http://www.510link.com");
size_t readStringBuffFunction(char* data, size_t size, size_t nmemb, void* userStr); //解析data
size_t readStringKey(const char* sourceChr, const char* key, char* returnChr);


int main()
{
    if (GetNetWorkingTime())
    {
        std::cout << "ok" << std::endl;

    }
    else
    {

        printf("%s 向你问好!\n", "HttpClientTime");
    }

    return 0;
}

/******************************************************************************
 *  Name        :   HttpClient::writeFunc
 *  Author      :   cqnews
 *  Version     :   V1.0.0
 *  Data        :   2021.08.12
 *  Describe    :   解析data
 ******************************************************************************/
size_t readStringBuffFunction(char* data, size_t size, size_t nmemb, void* userStr)
{
    int res = -1;

    if (userStr != NULL)
    {
        ((std::string*)userStr)->append((char*)data, size * nmemb);
        return size * nmemb;
    }

    return res;
}


/******************************************************************************
     *  Name        :   HttpClient::GetNetWorkingTime
     *  Author      :   cqnews
     *  Version     :   V1.0.0
     *  Data        :   2021.08.30
     *  Describe    :   检查联网状态
     ******************************************************************************/
bool GetNetWorkingTime(const char* httpurl)
{
    //创建curl对象 
    CURL* curl;
    //创建curlcode对象 
    CURLcode res;

    bool ret = false;

    curl = curl_easy_init();
    if (curl)
    {
        std::string readHeader = "";
        //设置一个请求文件地址 
        curl_easy_setopt(curl, CURLOPT_URL, httpurl);
        curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 5);//设置超时时间
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5);//设置超时时间
        curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, readStringBuffFunction);
        curl_easy_setopt(curl, CURLOPT_HEADERDATA, (void*)&readHeader);
        curl_easy_setopt(curl, CURLOPT_HEADER, 0);    //只需要header头
        curl_easy_setopt(curl, CURLOPT_NOBODY, 1);    //不需要body
        curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
        //执行请求操作,将返回值交给res 
        res = curl_easy_perform(curl);
        //res=0的情况表示接收到信息,反之则没有收到信息 
        if (res == CURLE_OK)
        {
            std::cout << "readHeader1:" << readHeader << std::endl;
            readHeader = strstr(readHeader.c_str(), "Date: ");
            std::cout << "readHeader2:" << readHeader << std::endl;

            char dateChr1[30] = { 0 };
            sscanf(readHeader.c_str(), "%[^\n]", dateChr1);
            std::cout << "dateChr1:" << dateChr1 << std::endl;

            char* dateChr2 = dateChr1;
            dateChr2 += strlen("Date: ");
            std::cout << "dateChr2:" << dateChr2 << std::endl;

            tm tm_;
            strptime(dateChr2, "%a, %d %b %Y %H:%M:%S GMT", &tm_); //将字符串转换为tm时间
            tm_.tm_hour += 8;

            char buf[128] = { 0 };
            strftime(buf, 64, "%Y-%m-%d %H:%M:%S", &tm_);
            std::cout << buf << std::endl;

            //已经联网
            ret = true;
        }
        else
        {
            //没有联网
            ret = false;
        }
        /* 释放资源 */
        if (curl) { curl_easy_cleanup(curl); }
    }
    return ret;
}

 

测试效果如下

 

标签:http,setopt,c++,char,easy,校时,curl,CURLOPT,size
From: https://www.cnblogs.com/cqwo/p/17119860.html

相关文章

  • 云小课|使用SpringBoot快速构建FunctionGraph HTTP函数
    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击......
  • Nginx优化HTTPS提速30%
    在上一篇文章我们已经通过HTTP缓存优化静态文件访问速度,今天我们再来聊聊 HTTP协议优化 的问题。HTTP协议优化主要分为开启HTTP/2和ssl缓存优化,下面我们单独对这两种......
  • 【opencv c++】实现yolov5部署onnx模型完成目标检测
    总代码#include<fstream>#include<sstream>#include<iostream>#include<opencv2/dnn.hpp>#include<opencv2/imgproc.hpp>#include<opencv2/highgui.hpp>usin......
  • c++函数与结构
    当结构比较小时,按值传递结构最合理。传递2个值结构体,返回一个结构体,返回的结构体中的成员是参数各成员的和。#include<cstring>usingnamespacestd;structthings{i......
  • C/C++读入含有空格的字符串
    好久之前遇到gets()不准用的情况,所以稍稍参考了一下网上的方法,整理一下。 charst[maxn];strings;1、gets(st);2、scanf("%[^\n]",st);3、getline(cin,s);......
  • C++PrimerPlus中文第六版第11章编程练习答案
    1、//vector.h#ifndefVECTOR_H_#defineVECTOR_H_#include<iostream>namespaceVECTOR{classVector{public:enumMode{RECT,POL};......
  • C/C++产品销售统计系统[2023-02-14]
    C/C++产品销售统计系统[2023-02-14]题目15: 产品销售统计一家公司生产五种产品,每种产品在一个月内每周的生产数量和销售价格都要记录下来。下面是一个二维的表格,表格的每......
  • C/C++图书入库管理系统[2023-02-14]
    C/C++图书入库管理系统[2023-02-14]题目21图书入库管理系统【说明及要求】实现图书信息(书号、书名、作者、定价、数量)的新增、修改、删除和查询功能;实现入库信息(书......
  • https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/repodata/r
    yum安装时,出现以下异常:yuminstall-ykubeletkubeadmkubectl#出现异常https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/repodata/repomd.......
  • C/C++便条管理系统[2023-02-14]
    C/C++便条管理系统[2023-02-14]便条管理系统某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便......