curl实现ftp客户端 ftp上送内存数据实例

curl 实现 https、ftp下载文件 代码 cURL 是一个网络数据传输项目,通常说 cURL 是指 curl 命令行工具,它支持 DICT、FILE、FTP、FTPS、Gopher、HTTP、HTTPS、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMB、SMBS、SMTP、SMTPS、Telnet 与 TFTP 等协议,而 curl 的底层使用的是 libcurl 库,libcurl 与 curl 组成了 cURL 项目。命令没问题的话我们源码编译安装成功,下面就可以写代码实现了。 阅读详情

30.1 前言

ftpclient相对于ftpsever在应用实现上比较简单,可以调用现成的很多库快速实现ftp、http等客户端,本篇将实现使用curl 实现ftp客户端的实例编程。

本篇博客整合了ftp上送文件以及上送内存数据的方式,便于理解和使用,用户只需填写对应的结构数据,并将该参数传入对应的函数,便可实现ftp上送文件或ftp上送内存数据功能。模块的编写是基于模块独立的设计思想,与用户代码实现尽可能的隔离开来,降低耦合。

 

30.2 代码实例

main.c

#ifndef __FTPCLIENT_H  
#define __FTPCLIENT_H      
  
#ifdef __cplusplus   
extern "C" {   
#endif  
/***************************************************************** 
* 宏定义 
******************************************************************/  
#define FTP_OPERATION_UPLOAD_MEM            0   //上传内存数据  
#define FTP_OPERATION_UPLOAD_FILE           1   //上传文件数据  
  
/***************************************************************** 
* 结构、枚举定义 
******************************************************************/  
typedef struct _stFtpUserInfo  
{  
    int nOperation;             //操作选择  
    int nHaveSendLen;           //已发送长度  
    int nSedSize;               //发送数据大小  
    int nRcvBufLen;             //缓冲区长度  
    int nRcvSize;               //接收body数据大小  
  
    char cSndFilePathName[128]; //上送文件路径名  
    char *pRcvBuffer;           //指向用户用来存储数据的buf  
    char *pSendBuffer;          //指向用户发送数据的buf  
}stFtpUserInfo;  
  
typedef struct _stFtpClientInfo  
{  
    int nServerPort;            //ftp服务器监听端口号  
    char chServerIP[32];        //ftp服务器IP  
    char chServerPath[128];     //ftp服务器文件路径  
    char chUserName[32];        //ftp服务器登录用户  
    char chUserPassWord[32];    //ftp服务器登录密码  
  
    int use_proxy;              //是否使用http服务器代理  
    int nHttpServerPort;        //ftp服务器监听端口号  
    char chHttpServerIP[32];    //ftp服务器IP  
    char chHttpServerPath[64];//ftp服务器文件路径  
  
    stFtpUserInfo stFtpUser;  
}stFtpClientInfo;  
  
int ftpClient_ftpUpload(stFtpClientInfo *pstUserArg,long *pRespCode);  
  
#ifdef __cplusplus  
}  
#endif  
  
#endif  

ftpClient.c

#ifdef __cplusplus  
    extern "C" {  
#endif  
      
  
/***************************************************************** 
* 包含头文件 
******************************************************************/  
#include <string.h>  
#include <sys/types.h>  
#include <sys/stat.h>  
#include <fcntl.h>  
#include "curl.h"  
#include "ftpClient.h"  
  
  
/************************************************* 
** Function:ftpClient_writeCallBack 
** Description:ftp回调数据接收函数 
** Input:无 
** Output: 
 
** Return:-1-失败 0-成功 
** Author: 
** Date:2018-11-27 
 
** Modification History: 
** Author: 
** Date: 
** Description: 
*************************************************/  
size_t ftpClient_writeCallBack(void *ptr, size_t size, size_t nmemb, void *stream)  
{  
    int writeLength = 0;  
    int written  = size*nmemb;  
    stFtpUserInfo *pSt = (stFtpUserInfo*)stream;      
  
    if(0)//此处记录body内容  
    {  
        if(pSt->pRcvBuffer != NULL)  
        {  
            writeLength = (written <= (pSt->nRcvBufLen - pSt->nRcvSize))?(written):(pSt->nRcvBufLen - pSt->nRcvSize);  
            memcpy((char*)(pSt->pRcvBuffer) +pSt->nRcvSize, ptr, writeLength);  
            pSt->nRcvSize += writeLength;  
            //printf("%d line,nWRLength=%d written=%d nUsedLength=%d writeLength=%d\n",__LINE__,pSt->nRcvBufLen, written,pSt->nRcvSize,writeLength);  
        }  
        return writeLength;  
    }  
    if(0){  
        printf("\n %s\n", ptr);  
    }  
    return 0;  
}  
  
/************************************************* 
** Function:ftpClient_file2Ftp 
** Description:ftp读取文件并上送 
** Input:无 
** Output: 
 
** Return:-1-失败 0-成功 
** Author: 
** Date:2018-11-27 
 
** Modification History: 
** Author: 
** Date: 
** Description: 
*************************************************/  
size_t ftpClient_file2Ftp(void *ptr, size_t size, size_t nmemb, void *stream)  
{  
    size_t retcode = fread(ptr, size, nmemb, stream);  
    return retcode;  
}  
  
  
/************************************************* 
** Function:ftpClient_mem2Ftp 
** Description:ftp读取内存数据 
** Input:无 
** Output: 
 
** Return:-1-失败 0-成功 
** Author: 
** Date:2018-11-27 
 
** Modification History: 
** Author: 
** Date: 
** Description: 
*************************************************/  
size_t ftpClient_mem2Ftp(void *ptr, size_t size, size_t nmemb, void *stream)  
{  
    size_t cpoyLength = 0;  
    size_t copySize  = size*nmemb;  
    stFtpUserInfo *pSt = (stFtpUserInfo*)stream;  
      
    if((size == 0) || (nmemb == 0) || ((size*nmemb) < 1)) {  
        return 0;  
    }  
      
    if(pSt->pSendBuffer != NULL)  
    {  
        cpoyLength = (copySize <= (pSt->nSedSize - pSt->nHaveSendLen))?(copySize):(pSt->nSedSize - pSt->nHaveSendLen);  
        memcpy(ptr,(char*)(pSt->pSendBuffer) +pSt->nHaveSendLen, cpoyLength);  
        pSt->nHaveSendLen += cpoyLength;  
        //printf("%d line,copySize=%d nSedSize=%d nHaveSendLen=%d cpoyLength=%d\n",__LINE__,copySize, pSt->nSedSize,pSt->nHaveSendLen,cpoyLength);  
    }  
    return cpoyLength;  
}  
  
  
/************************************************* 
** Function:ftpClient_ftpUpload 
** Description:ftpUpload 
** Input:无 
** Output: 
 
** Return:-1-失败 0-成功 
** Author: 
** Date:2018-11-27 
 
** Modification History: 
** Author: 
** Date: 
** Description: 
*************************************************/  
int ftpClient_ftpUpload(stFtpClientInfo *pstUserArg,long *pRespCode)  
{  
    int nRet = 0;  
    long response_code      = -1;  
    char chftpUrl[160]  ={0};  
    char chHttpUrl[128]     ={0};  
  
    FILE *ffp = NULL;  
    curl_off_t fsize = 0;  
  
    CURL *curl = NULL;  
    CURLcode code = 0;  
    struct stat file_info;  
    struct curl_slist *chunk = NULL;      
  
    *pRespCode = 0;  
  
    if(NULL == pstUserArg){  
        printf("%s func Invalid parameter at (%d) line\n",__FUNCTION__,__LINE__);  
        return -1;  
    }  
  
    curl = curl_easy_init();  
    if(curl)  
    {  
        snprintf(chftpUrl,160,"ftp://%s:%u/%s", pstUserArg->chServerIP, pstUserArg->nServerPort, pstUserArg->chServerPath);      
          
    //  printf("%s func User=%s ,passwd=%s,chUrl=%s at (%d) line\n",__FUNCTION__,pstUserArg->chUserName,pstUserArg->chUserPassWord,chftpUrl,__LINE__);  

  		curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); 
        curl_easy_setopt(curl, CURLOPT_URL, chftpUrl);  
        curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); //上传  
        curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);   //注意,毫秒超时一定要设置这个  
        curl_easy_setopt(curl, CURLOPT_USERNAME, pstUserArg->chUserName);  
        curl_easy_setopt(curl, CURLOPT_PASSWORD, pstUserArg->chUserPassWord);          
        curl_easy_setopt(curl, CURLOPT_TIMEOUT, 60L);    //设置延时1s  
        curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 60L);  
        curl_easy_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS, 1);//创建不存在的目录  
          
        /* enable TCP keep-alive for this transfer */  
        curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);  
        /* keep-alive idle time to 120 seconds */  
        curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 600L);  
        /* interval time between keep-alive probes: 60 seconds */  
        curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);  
  
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ftpClient_writeCallBack);  
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &pstUserArg->stFtpUser);   /*接收响应*/  
  
        switch(pstUserArg->stFtpUser.nOperation)  
        {  
            case FTP_OPERATION_UPLOAD_MEM:  //发送内存数据  
                curl_easy_setopt (curl, CURLOPT_READDATA, &pstUserArg->stFtpUser);                 
                curl_easy_setopt (curl, CURLOPT_READFUNCTION, ftpClient_mem2Ftp);  
                curl_easy_setopt (curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t) pstUserArg->stFtpUser.nSedSize);  
                break;  
            case FTP_OPERATION_UPLOAD_FILE:  //ftp发送文件  
  
                /********************打开文件***************/  
                if(stat(pstUserArg->stFtpUser.cSndFilePathName, &file_info)){  
                    printf("ftp upload stat %s failed\n", pstUserArg->stFtpUser.cSndFilePathName);  
                    goto iExit;  
                }  
                fsize = (curl_off_t) file_info.st_size;  
                ffp = fopen (pstUserArg->stFtpUser.cSndFilePathName, "rb");  
                if(NULL == ffp){  
                    printf("ftp fopen %s failed!\n", pstUserArg->stFtpUser.cSndFilePathName);  
                    goto iExit;  
                }  
  
                curl_easy_setopt (curl, CURLOPT_READDATA, ffp);               
                curl_easy_setopt (curl, CURLOPT_READFUNCTION, ftpClient_file2Ftp);  
                curl_easy_setopt (curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t) fsize);  
                break;  
            default:  
                break;  
        }  
  
        /*是否使用了http代理服务器*/  
        if(pstUserArg->use_proxy == 1)  
        {  
            snprintf(chHttpUrl,128,"http://%s/%s/%s", pstUserArg->chHttpServerIP, pstUserArg->nHttpServerPort, pstUserArg->chHttpServerPath);  
            curl_easy_setopt (curl, CURLOPT_PROXY, chHttpUrl);  
        }  
  
        code = curl_easy_perform(curl);  
        if(code != CURLE_OK)  
        {  
            nRet = -1;  
            printf("%s func curl_easy_perform failed:%s at (%d) line\n",__FUNCTION__,curl_easy_strerror(code),__LINE__);  
        }   
        else  
        {  
            curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);  
            if(226 != response_code)//对于ftp成功是226码  
            {  
                nRet = -1;  
                printf("%s func curl_easy_getinfo RESPONSE_CODE: %d at (%d) line\n",__FUNCTION__,response_code,__LINE__);  
            }  
        }         
          
        switch(pstUserArg->stFtpUser.nOperation)  
        {  
            case FTP_OPERATION_UPLOAD_MEM:  //发送内存数据  
                break;  
            case FTP_OPERATION_UPLOAD_FILE:  //ftp发送文件  
                if(NULL != ffp) fclose(ffp);  
                break;  
            default:  
                break;  
        }  
  
        curl_slist_free_all(chunk);  
        curl_easy_cleanup(curl);  
          
        *pRespCode = response_code;  
        return nRet;  
    }  
      
    return -1;  
  
iExit:  
    curl_slist_free_all(chunk);  
    curl_easy_cleanup(curl);  
    return -1;  
}  
  
  
#ifdef __cplusplus  
}  
#endif  

main.c

#include <string.h>  
#include <stdlib.h>  
#include <stdio.h>  
#include <pthread.h>  
#include <unistd.h>  
#include "ftpClient.h"  
  
int main()  
{  
    int nRet = -1;  
    char *pSendData = "123456789";  
    long lRespCode = 0;  
    stFtpClientInfo stFtpClienter;    
    memset(&stFtpClienter,0,sizeof(stFtpClienter));  
  
    memcpy(stFtpClienter.chServerPath,"/test.jpg",strlen("/test.jpg"));  
    memcpy(stFtpClienter.chServerIP,"192.168.36.56",strlen("192.168.36.56"));  
    memcpy(stFtpClienter.chUserName,"root",strlen("root"));  
    memcpy(stFtpClienter.chUserPassWord,"3214",strlen("3214"));  
    stFtpClienter.nServerPort               = 2125;  
    stFtpClienter.use_proxy                 = 0;//是否选择http代理服务器,0-不选择  
    stFtpClienter.stFtpUser.nOperation      = FTP_OPERATION_UPLOAD_MEM; //选择是否上送内存数据或文件  
    stFtpClienter.stFtpUser.pRcvBuffer      = NULL;  
    stFtpClienter.stFtpUser.nRcvBufLen      = 0;  
    stFtpClienter.stFtpUser.nRcvSize        = 0;          
    stFtpClienter.stFtpUser.nHaveSendLen    = 0;  
    stFtpClienter.stFtpUser.pSendBuffer     = pSendData; //发送数据  
    stFtpClienter.stFtpUser.nSedSize        = strlen(pSendData); //发送数据长度  
      
    /*上送至ftp服务器*/  
    nRet = ftpClient_ftpUpload(&stFtpClienter,&lRespCode);  
    if(nRet<0){  
        printf("ftpClient_ftpUpload failed\n");  
        return -1;  
    }  
  
    return 0;  
} 

 

 

Curl(C++)使用教程 1、Curl简介 2、Easy interface 3、Multi interface 1、Curl简介 libcurl作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP,... 阅读详情

相关推荐

Arcgis空间分布方向性分析

Arcgis空间分布方向性分析 一、标准差椭圆方法概述 空间分布方向性分析是指区域经济属性在空间分布上的轮廓和主导方向。 标准差椭圆法是分析空间分布方向性特征的经典方法之一,使用标准差椭圆可 从全局的、空间的角度定量解释经济要素空间分布的中心性、展布性、方向性和 空间形态等整体性特征,因其直观性与有效性已得到广泛应用,已成为 Arc GIS 空间统计模块的常规统计工具。SDE 方法生成的结果为一个椭圆,从其生 成算法来看,首先用平均中心来确定椭圆的圆心,然后由平均中心作为起点 对 X 坐标

端木宛白的博客家园 4万+

使用curl 命令上传下载FTP

CURL命令行 常见操作 1、列出ftp服务器上的目录列表: curl ftp://www.xxx.com/ --user name:passwd curl ftp://www.xxx.com/ –u name:passwd #简洁写法1 curl ftp://name:passwd@www.xxx.com #简洁写法2 2、只列出目录,不显示进度条 curl ftp://www.xxx.com –u name:passwd -s 3、下载一个文件: curl ftp://www.xxx.com/s.

$好记性还是要多记录$ 1万+

机器视觉--线扫相机触发:从原理到选型,构建高效成像方案

本文深入解析线扫相机触发技术,从硬件编码器触发到软件触发方案,提供详细的性能对比和选型指南。通过实际案例展示如何构建高效成像方案,特别适合机器视觉领域需要精准控制的应用场景,如工业检测和自动化生产线。

weixin_42531886的博客 417

使用CURL命令实现tftp和ftp客户端功能

curl ftp tftp

文石_2009的博客 2016

Doris + Iceberg 实现高效数据湖分层:架构解析与最佳实践

本文深入解析了如何利用Doris与Iceberg构建高效的数据湖冷热分层架构。通过将高频访问的热数据存储在Doris中以实现毫秒级查询,同时将历史冷数据归档至低成本的Iceberg存储,该方案在保障查询性能的同时显著降低了总体拥有成本。文章详细阐述了从架构设计、自动化迁移到统一查询的最佳实践,为应对海量数据下的成本与性能平衡提供了实战指南。

weixin_29207533的博客 135

Halcon频域滤波实战:5分钟搞定傅里叶变换与功率谱分析(附完整代码)

本文提供Halcon频域滤波的实战指南,重点讲解如何利用傅里叶变换与功率谱分析快速解决图像处理难题。通过核心算子fft_image和power_real,演示了从空间域转换到频域、分析功率谱以定位周期性噪声,并构造滤波器进行精准去除的完整流程,附有可直接运行的代码示例。

docker8compose的博客 215

curl命令可以用来测试FTP连接是否联通

**解释**:尝试连接到IP地址为`192.168.0.1`、端口号为`21`的FTP服务器,并使用指定的用户名和密码进行认证。- **解释**:上传本地文件`localfile.txt`到FTP服务器的`upload/`目录,并显示详细的连接和传输信息。- **解释**:将本地文件`localfile.txt`上传到FTP服务器上的`remotefile.txt`。- **解释**:从FTP服务器下载`remotefile.txt`到本地。1. **测试FTP连接并显示详细信息**

weixin_43803780的博客 844

CDR插件开发之CPG插件004 - 认识VGCore并编译生成你的第一个CPG文件

上篇文章中,讲到了使用VS2019编译CDR类型库 VGCoreAuto.tlb,编译后得到了vgcoreauto.tlh和vgcoreauto.tli两个文件。本文将对这两个文件说明,并演示通过标准的libid形式来导入CDR类型库,在这个过程中,穿插一些VS2019的使用技巧(删除目录、复制工程、打开项目或解决方案、修改解决方案名称、修改项目名称等),使读者循序渐进,逐步提高对VS2019工具的熟练程度,最后通过修改项目属性配置,生成第一个CPG文件。

Zebe 2984

Linux命令cURL如何访问FTP服务器

前言 cURL 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。 cURL 的原作者是 Daniel Stenberg (目前是 cURL 的核心开发者),同时也是 IETF HTTPbis 工作组的资深成员。Daniel 在 1998 年创建了 curl 项目,他编写了最初的 curl 版本,并创建了 libcurl 库。到目前为止,代码仓库包括的 24000 次 commit 有超过一半是 Daniel 本人提交的,他依然是项目的核心开发者。Dan

一口Linux的专栏 8525

【仿真技巧】Smart Eye Probe在ADS信号仿真中的应用

Smart_Eye_Probe是一个眼探头,允许灵活数量的输入通道,输入通道支持单端或差分信号的混合,并且,可以使用一个共同的时钟信号触发通道的眼图。目前,仅支持瞬态(Transient)和通道(Channel Sim)逐位模式(Bit by bit)模拟,不支持信道统计(Statistical)模式和DDR总线(DDRSim)仿真。

一只豌豆象的博客 1270

微信小程序:errno: 1500104, errCode: 10008, errMsg: “writeBLECharacteristicValue:fail:system error, status

微信小程序errno: 1500104, errCode: 10008, errMsg: "writeBLECharacteristicValue:fail:system error, status: UNKNOWN (239)"微信小程序调用蓝牙API,wx.writeBLECharacteristicValue()报错,微信小程序蓝牙写入错误,在开发uniapp微信小程序蓝牙通信功能时报错,蓝牙开发设备控制核心api,微信小程序调用蓝牙API “wx.writeBLECharacteristicValu

✅ 精选推荐文章 3930

curl内存优化:减少内存占用与提高性能的技巧

在网络应用开发中,curl作为最广泛使用的HTTP客户端库之一,其内存使用效率直接影响应用程序的性能和稳定性。在高并发场景下,不当的内存配置可能导致内存泄漏、性能下降甚至系统崩溃。本文将深入探讨curl的内存管理机制,并提供实用的优化技巧。 ## curl内存管理架构 ### 核心内存组件 curl的内存管理主要涉及以下几个核心组件: ```mermaid classDiagram ...

gitblog_00376的博客 998

SAP采购申请审批策略配置简介

SAP采购申请审批策略配置简介 1、CT04创建特征

我小时候很黑的博客 8162

QT开发FTP客户端(curl库)闪退问题解决

本文分析了FTP客户端开发中遇到的闪退问题及其解决方案。核心问题在于writeCallback函数被错误地用于两种不同场景:目录列表时接收数据到QByteArray,文件下载时写入QFile,导致内存访问错误。解决方案是为两种操作分别定义独立的回调函数:writeCallbackForList和writeCallbackForDownload。此外,文章还总结了开发过程中解决的其他关键问题,包括跨线程数据传输、FTP目录解析、本地路径处理以及libcurl依赖问题。通过这些改进,FTP客户端实现了稳定的连接

Java、C语言、嵌入式开发,计算机科学与技术专业 245

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

嵌入式cURL实战:STM32F1轻量级HTTP客户端移植与优化

本文详细介绍了如何在资源受限的STM32F1嵌入式平台上移植和优化轻量级cURL库,实现高效的HTTP客户端功能。通过硬件选型、cURL裁剪、内存管理优化和网络适配层实现,成功将libcurl移植到仅20KB RAM的MCU,并提供了物联网数据上传的实战案例与性能调试技巧。

pandas7gardener的博客 83

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

嵌入式cURL优化实战:STM32F1上的轻量级HTTP客户端移植与性能调优

本文详细介绍了在资源受限的STM32F103嵌入式平台上移植和优化cURL库的实战经验。通过源码裁剪、内存池管理、LWIP协议栈集成等关键技术,将cURL内存占用控制在100KB以内,实现了高效的HTTP数据上报和OTA固件升级功能,为嵌入式IoT设备提供了稳定可靠的网络通信解决方案。

e4f5g6h7的博客 1041

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

curl下载失败返回0_操作失败,返回 curl_error 错误代码

CURL状态码列表状态码状态原因解释0正常访问1错误的协议未支持的协议。此版cURL 不支持这一协议。2初始化代码失败初始化失败。3URL格式不正确URL 格式错误。语法不正确。4请求协议错误5无法解析代理无法解析代理。无法解析给定代理主机。6无法解析主机地址无法解析主机。无法解析给定的远程主机。7无法连接到主机无法连接到主机。8远程服务器不可用FTP 非正常的服务器应答。cURL 无法解析服务器...

weixin_36128990的博客 1238

Curl命令返回状态码

https://www.cnblogs.com/xingxia/p/linux_curl.html(这篇文章内容写的很棒)Curl命令返回状态码原因和说明请看下面列表。本篇文章内容来自网络。

lxy123_com的博客 4534

cURL 源码解析

curl 介绍 Curl 分为 curl 和 libcurl 两个部分。 curl:命令行程序 libcurl:链接库 对应开发,都是使用 libcurl 中的 api。为了方便下述统一使用 curl 来表示。 curl是一个开源的客户端url传输库,支持众多的协议,包括DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, T

林元皓 8842

curl命令错误码汇总

状态码 状态原因 解释 0 正常访问 1 错误的协议 未支持的协议。此版cURL 不支持这一协议。 2 初始化代码失败 初始化失败。 3 URL格式不正确 URL 格式错误。语法不正确。 4 请求协议错误 5 无法解析代理 无法解析代理。无法解析给定代理主机。 6 无法解析主机地址 无法解析主机。无法解析给定的远程主机。 7 无法连接到主机 无法连接到主机。 8

杰姆小生的博客 1万+

libcurl简单接口的使用(FTP)

教材:linux环境C程序设计 徐诚 高莹婷    网络资料 一. 文件传输协议(File Transfer Protocol)是进行文件传输的一套标准协议,属于TCP/IP协议的一部分。FTP服务一般在20和21两个端口。其中20用于数据连接,21用于控制连接。FTP有两种使用模式:主动模式和被动模式。主动模式安全性高,要求服务端和客户端各打开一个端口并监听以建立连接,但客户端的防火墙可能阻

sever2012的专栏 1万+

CURL状态码列表

curl是一个强大的命令,其中我们经常使用的通过curl 加地址和端口号,判断目标链接状态,下面列出了curl 返回的状态码。

ssk0411的博客 2073

『cURL』curl: (6) Could not resolve host无法解析主机地址

最近在学数据挖掘时,获取数据有两种途径: 开放数据集,可以直接使用和存储的数据; 网络数据,通过爬虫或云市场api(付费或免费)获取数据 我通过教程,在阿里云购买一个天气数据api,尝试使用cURL获取数据。 按图片的示例代码,在cmd中输入 curl -i -k --get --include 'https://ali-weather.showapi.com/weath...

weixin_30702413的博客 1万+

PHP关于curl,socket,fsockopen,stream,file_get_contents区别

curl:curl是一个非常完善的功能十分强大的对socket的封装扩展,支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证,HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等。毕竟有的时候还是会用到其它的方法的。

本博客记录了从2014年以来在工作学习中遇到的技术问题、解决方法以及部分个人人生经历、经验等内容。 1259

curl shell 失败_curl返回常见错误码

CURL状态码列表状态码状态原因解释0正常访问1错误的协议未支持的协议。此版cURL 不支持这一协议。2初始化代码失败初始化失败。3URL格式不正确URL 格式错误。语法不正确。4请求协议错误5无法解析代理无法解析代理。无法解析给定代理主机。6无法解析主机地址无法解析主机。无法解析给定的远程主机。7无法连接到主机无法连接到主机。8远程服务器不可用FTP 非正常的服务器应答。cURL 无法解析服务器...

weixin_39834984的博客 1762
上一篇: libevent HTTPserver/ libcurl HTTPClient构建
下一篇: 33 Linux内核高精度定时器实现延时
Chasing_Chasing
博客等级 码龄10年 233粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值