zoukankan      html  css  js  c++  java
  • 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();
    }
    
  • 相关阅读:
    HBase 高性能加入数据
    Please do not register multiple Pages in undefined.js 小程序报错的几种解决方案
    小程序跳转时传多个参数及获取
    vue项目 调用百度地图 BMap is not defined
    vue生命周期小笔记
    解决小程序背景图片在真机上不能查看的问题
    vue项目 菜单侧边栏随着右侧内容盒子的高度实时变化
    vue项目 一行js代码搞定点击图片放大缩小
    微信小程序进行地图导航使用地图功能
    小程序报错Do not have xx handler in current page的解决方法
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709310.html
Copyright © 2011-2022 走看看