• curl http libcurl 功能使用


    /*
     * This example shows a HTTP PUT operation. PUTs a file given as a command
     * line argument to the URL also given on the command line.
     *
     * This example also uses its own read callback.
     *
     * Here's an article on how to setup a PUT handler for Apache:
     * http://www.apacheweek.com/features/put
     */
    
    static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
    {
      size_t retcode;
      curl_off_t nread;
    
      /* in real-world cases, this would probably get this data differently
         as this fread() stuff is exactly what the library already would do
         by default internally */
      retcode = fread(ptr, size, nmemb, (FILE*)stream);
    
      nread = (curl_off_t)retcode;
    
      fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T
              " bytes from file
    ", nread);
    
      return retcode;
    }
    
    //http协议上传
    void fileUploadHttp()
    {
      CURL *curl;
      CURLcode res;
      FILE * hd_src;
      struct stat file_info;
    
      QString locale = ui->lineEdit_path->text();
      char *file = locale.toLatin1().data();
      QFileInfo fileInfo(locale);
      QString fileName = fileInfo.fileName();
      QString remote = "http://www.example.com/upload.php?filename=" + fileName;
      char *remote_url = remote.toLatin1().data(); //服务器路径
    
      /* get the file size of the local file */
      stat(file, &file_info);
    
      /* get a FILE * of the same file, could also be made with
         fdopen() from the previous descriptor, but hey this is just
         an example! */
      hd_src = fopen(file, "rb");
    
      /* In windows, this will init the winsock stuff */
      curl_global_init(CURL_GLOBAL_ALL);
    
      /* get a curl handle */
      curl = curl_easy_init();
      if(curl) {
        /* we want to use our own read function */
        curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
    
        /* enable uploading */
        curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
    
        /* HTTP PUT please */
        curl_easy_setopt(curl, CURLOPT_PUT, 1L);
    
        /* specify target URL, and note that this URL should include a file
           name, not only a directory */
        curl_easy_setopt(curl, CURLOPT_URL, remote_url);
    
        /* now specify which file to upload */
        curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
    
        /* provide the size of the upload, we specicially typecast the value
           to curl_off_t since we must be sure to use the correct data size */
        curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
                         (curl_off_t)file_info.st_size);
    
        /* Now run off and do what you've been told! */
        res = curl_easy_perform(curl);
        /* Check for errors */
        if(res != CURLE_OK)
          fprintf(stderr, "curl_easy_perform() failed: %s
    ",
                  curl_easy_strerror(res));
    
        /* always cleanup */
        curl_easy_cleanup(curl);
      }
      fclose(hd_src); /* close the local file */
    
      curl_global_cleanup();
    }
    
  • 相关阅读:
    【狼】狼的unity3d脚本学习
    [转]关于Unity中文件读取
    【狼】unity3d 安卓播放视频替代视频纹理
    SpringMVC异常处理
    springboot 热启动
    旅游网dao层
    MyBatisPlus快速入门
    旅游网dao层
    MySQL8 修改密码验证插件
    Zookeeper环境搭建
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709310.html
Copyright © 2020-2023  润新知