当前位置:首页 » 文件传输 » libcurl操作ftp
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

libcurl操作ftp

发布时间: 2022-12-09 10:33:18

‘壹’ libcurl ftp支不支持被动模式

使用虚拟主机的时候,往往需要使用FTP相关软件客户端上传网站文件,但是往往在连接FTP客户端过程出现这样或那样的问题.授人以鱼不如授人以渔,今天周良在这里将向大家详解关于FTP连接的两种模式,和大家一同分享,只要搞懂了FTP的连接过程,以后遇到相应的连接问题就可以轻松搞定了。

‘贰’ 如何用libcurl登陆带SSL认证相关的FTP服务器

微软的ftp目前没有提权的漏洞,只是在早期的2000系统的iss中有,但是早就不存在了。所以ftp提权放弃吧。限制的目录跳转只是禁止权限继承而已,还是从cmd shell下手吧。

‘叁’ curl什么意思

CURL是一个利用URL语法在命令行下工作的文件传输工具。

1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。

工具简介

cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。

cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。

curl还支持SSL认证、HTTP POST、HTTP PUT、FTP上传, HTTP form based upload、proxies、HTTP/2、cookies、用户名+密码认证(Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos)、file transfer resume、proxy tunneling。

相关函数

PHP cURL 函数

PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯。libcurl支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

‘肆’ 关于libcurl库如何在ftp上创建文件和文件夹

在你的curl_easy_perform函数执行之前加上这一句curl_easy_setopt(yourhandle, CURLOPT_FTP_CREATE_MISSING_DIRS, 1); 达到的效果是远程服务器如果没有这个目录,会自动创建然后上传文件到这个目录下面。你问的那个问题应该跟这个有些类似,建议你多看看头文件的定义和文档。

‘伍’ 怎么用libcurl实现ftp断点续传

这个需要FTP server支持append,我之前用它的命令行测试过的,libcurl可以实现断点续传。

‘陆’ 基于libcurl库,用C++编写了FTP上传函数,传本地文件,现在为了提高效率,想直接发一段内存过去,咋做

写一个回调函数,将文件切分成多块,每次上传成功就增加 size 记录当前已经下载的大小 记得读写文件要用 fseek

‘柒’ libcurl库中如何在FTP上创建文件夹,具体通过curl_easy_setopt()如何去写

感兴趣,同问。

‘捌’ luacrul类库-ftp问题分析/解决

问题:使用smart_pub.kkf2中的 function t.upload(sftpTab) 函数ftp上传报错;

改函数使用了 LuaCURL库函数,网上先了解一下:

查了其他网站资料,对LUA的类库解释的很少,官网英文且解释的不全面,不容易理解,
所以参考php的libcurl库说明,语言不同,类似可以参考;
分析报错信息,初步理解为文件目录不存在,或者创建失败;定位:

查看系统关键源码设置:
源码【顺便在源码上加了注释,便于理解其他参数】

新增设置

测试问题解决:

还好之前使用过curl工具模拟webservice、rest客户端报文测试,相对通用理解一些,curllib库还有很多功能可能总结学习;

参考 http://luaforge.net/projects/luacurl/
http://underpop.free.fr/l/lua/luacurl/
https://www.cnblogs.com/endv/p/8433889.html

‘玖’ 如何评价libcurl

libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。, libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你也可以使用PHP的ftp扩展), HTTP基本表单上传,代理,cookies,和用户认证。
中文名
libcurl
支持
libcur
允 许
不同的协议连接
封 装
sockPHP
上 传
代理,cookies,

‘拾’ 常用libcurl异步使用方法

1 背景知识
2 libcurl 基础知识
3 libcurl两种模式
4 libcurl实例分析

1 背景知识:

1.1 基本网络通信cs模式,select 框架,网上例子很多.下面只介绍epoll的难点.其他内容请自行搜索.

1.2 epoll 用法

1.2.1 基础知识:

在自己端准备write之前,通过epoll ctrl设置成epoll out.
epoll in 是被动监听接收,epoll out是主动设置.

1.2.2 epoll 模型:网上例子很多.

这个是最简单异步,先发送--等待--接收,这种用法很少用了
https://blog.csdn.net/lijinqi1987/article/details/53925835 and https://blog.csdn.net/Rong_Toa/article/details/105712677 .
本文讨论curl_multi_socket_action 方案.

**3.1 easy 模式(这种模式比较简单) **

调用curl_easy_setopt函数设置传输的一些基本参数,CULROPT_URL必填.设置完成后,调用curl_easy_perform函数发送数据.
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEDATA, void *pointer);
curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url);
curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb);
curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, conn);
第一句 curl建立与url 连接,第二句将respond 发送到write_cb,第三句是将write_cb处理内容写入conn指向的文件

3.2 multi 模式

1 ) 常用函数介绍(注意参数)
a ) CURLMOPT_SOCKETFUNCTION:设置socket的回调函数.是所有socket 变化都会调用callback(不仅仅是socket connect,read/write也调用).

对于接收的话,CURLMOPT_SOCKETDATA没用。socketp是返回值。
CURLMOPT_TIMERDATA and CURLOPT_WRITEDATA 都是对应 curl function的入参.

b) CURLMOPT_TIMERFUNCTION :set callback to receive timeout values

You can also use the curl_multi_timeout function to poll the value at any given time,
but for an event-based system using the callback is far better than relying on polling the timeout value.
系统超时操作触发callback.
c ) CURLOPT_WRITEFUNCTION:set callback for writing received data

CURLOPT_WRITEDATA:custom pointer passed to the write callback
设置CURLOPT_WRITEFUNCTION的参数4,把参数1 ptr指向的数据拷到参数4 userdata
d ) curl_multi_setopt

CURLMOPT_TIMERDATA:The userp pointer is set with CURLMOPT_TIMERDATA. 入参
curl_multi_setopt is used to tell a libcurl multi handle how to behave.
CURLMOPT_SOCKETFUNCTION,CURLMOPT_SOCKETDATA,CURLMOPT_TIMERFUNCTION,CURLMOPT_TIMERDATA
e) curl_multi_assign

set association sockfd with sockptr ;curl系统中将sockfd和sockpt结构体绑定

执行curl命令.curl_multi_socket_action=curl_multi_perform:reads/writes available data given an action.通知libcurl读写数据
执行curl_multi_add_handle中的东东. 注意参数3ev_bitmask是action.
比如: 设置了CURLMOPT_SOCKETFUNCTION就从server download file.设置CURLMOPT_UPLOAD就是上传file.
CURLOPT_WRITEFUNCTION 就调用CURLOPT_WRITEDATA将download data写入file.

curl同时和socket,epoll,file 同时打交道.
curl精华:curl_multi_socket_action可以自动get file from server(CURLOPT_URL) and 自动write file to local(CURLOPT_WRITEFUNCTION)
4.1 curl+ epoll
CURLOPT_URL=connect,CURLMOPT_SOCKETFUNCTION=epoll_ctrl, curl_multi_socket_action=get remote file and write file to local ,epoll=select.

实现步骤和时序:

https://curl.haxx.se/libcurl/c/ephiperfifo.html
[ https://www.jianshu.com/p/80274bc54aff]
( https://www.jianshu.com/p/80274bc54aff )
https://blog.csdn.net/Rong_Toa/article/details/105712677
https://blog.csdn.net/lijinqi1987/article/details/53996129
https://www.cnblogs.com/zl-graate/articles/6724446.html