zoukankan      html  css  js  c++  java
  • curl sftp libcurl 功能使用

    #include <curl/curl.h>
    
    #undef DISABLE_SSH_AGENT
    
    struct FtpFile {
      const char *filename;
      FILE *stream;
    };
    
    static size_t my_fwrite(void *buffer, size_t size, size_t nmemb,
                            void *stream)
    {
      struct FtpFile *out = (struct FtpFile *)stream;
      if(!out->stream) {
        /* open file for writing */
        out->stream = fopen(out->filename, "wb");
        if(!out->stream)
          return -1; /* failure, can't open file to write */
      }
      return fwrite(buffer, size, nmemb, out->stream);
    }
    
    //sftp协议
    void fileLoadSftp()
    {
      CURL *curl;
      CURLcode res;
    
      char *filename = ui->lineEdit_path->text().toLatin1().data(); //本地文件名
      QString remote = "sftp://user:password@example.com/etc/issue";
      char *remote_url = remote.toLatin1().data(); //服务器路径
    
      struct FtpFile ftpfile =
      {
        filename, /* name to store the file as if successful */
        NULL
      };
    
      curl_global_init(CURL_GLOBAL_DEFAULT);
    
      curl = curl_easy_init();
      if(curl) {
        /*
         * You better replace the URL with one that works!
         * sftp://user:password@example.com/etc/issue - This specifies the file /etc/issue
         */
        curl_easy_setopt(curl, CURLOPT_URL, remote_url);
        /* Define our callback to get called when there's data to be written */
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
        /* Set a pointer to our struct to pass to the callback */
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);
    
    #ifndef DISABLE_SSH_AGENT
        /* We activate ssh agent. For this to work you need
           to have ssh-agent running (type set | grep SSH_AGENT to check) or
           pageant on Windows (there is an icon in systray if so) */
        curl_easy_setopt(curl, CURLOPT_SSH_AUTH_TYPES, CURLSSH_AUTH_PASSWORD);
    #endif
    
        /* Switch on full protocol/debug output */
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
    
        res = curl_easy_perform(curl);
    
        /* always cleanup */
        curl_easy_cleanup(curl);
    
        if(CURLE_OK != res) {
          /* we failed */
          fprintf(stderr, "curl told us %d
    ", res);
        }
      }
    
      if(ftpfile.stream)
        fclose(ftpfile.stream); /* close the local file */
    
      curl_global_cleanup();
    }
    
  • 相关阅读:
    Linux零拷贝技术 直接 io
    纯Python模式
    c 越界 数组越界
    哈希 二叉树
    Cache busting
    sub esp
    lisp 代码即数据
    hexdump
    nmap
    对象 闭包
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709312.html
Copyright © 2011-2022 走看看