用途: rsync --daemon [选项]...
选项
--address=ADDRESS 绑定到指定的地址
--bwlimit=RATE 限制套接字I/O带宽
--config=FILE 不使用默认位置的rsyncd.conf文件,额外指定
-M, --dparam=OVERRIDE 覆盖全局守护进程配置参数
--no-detach 不要进行fork并后台运行
--port=PORT 监听指定的端口
--log-file=FILE 输出日志到指定文件
--log-file-format=FMT 用指定格式更新日志
--sockopts=OPTIONS 指定自定义的TCP选项
-v, --verbose 详细模式输出
-4, --ipv4 偏向于使用IPv4
-6, --ipv6 偏向于使用IPv6
--help 显示帮助信息
②.普通(客户端)模式:用途: rsync [OPTION]... SRC [SRC]... DEST
通过远程shell访问方式:
rsync [选项]... [用户名@]HOST:SRC [DEST]
rsync [选项]... SRC [SRC]... [用户名@]HOST:DEST
通过rsync daemon访问方式:
rsync [选项]... [用户名@]HOST::SRC [DEST]
rsync [选项]... SRC [SRC]... [用户名@]HOST::DEST
rsync [选项]... SRC [SRC]... rsync://[用户名@]HOST[:PORT]/DEST
rsync [选项]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
请注意,':'会使用ssh来远程连接,而'::'以及'rsync://'则用于以tcp方式连接一个rsync daemon服务器,这个需要SRC(源),以及包含模块名字的DEST(目的)
选项
-v, --verbose 详细模式输出
--info=FLAGS 输出INFO级别
--debug=FLAGS 输出DEBUG级别
--msgs2stderr 用于调试的特殊输出处理
-q, --quiet 忽略非error的输出
--no-motd 忽略Daemon模式的MOTD
-c, --checksum 让自动跳过基于校验和而非默认的修改时间以及文件大小
-a, --archive 归档(压缩)模式,表示以递归方式传输文件,并保持所有文件属性等同于-rlptgoD(无 -H,-A,-X)
--no-OPTION 关闭隐含的选项(例如 --no-D)
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
--no-implied-dirs 不使用--relative发送隐含的目录
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename.可以使用--suffix选项来指定不同的备份文件前缀
--backup-dir=DIR 将备份文件(如~filename)存放在指定目录下
--suffix=SUFFIX 定义备份文件前缀,默认是~
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件(不覆盖更新的文件)
--inplace update destination files in-place (SEE MAN PAGE)
--append 将数据附加到较短的文件
--append-verify 类似--append,但是对旧数据会计算校验和
-d, --dirs 不使用递归传输目录
-l, --links 不处理符号链接(保留符号链接)
-L, --copy-links 将符号链接处理为具体的文件或者文件夹
--copy-unsafe-links 只处理不安全的符号链接
--safe-links 忽略不在SRC源目录的符号链接
--munge-links munge符号链接使它们更安全(但会无法使用)
-k, --copy-dirlinks 把指向文件夹的符号链接转换为文件夹
-K, --keep-dirlinks 把接收端的指向文件夹的符号链接当做文件夹
-H, --hard-links 保留硬链接
-p, --perms 保留权限
-E, --executability 保留文件的可执行属性
--chmod=CHMOD 影响文件或文件夹的属性
-A, --acls 保留ACLs (代表--perms)
-X, --xattrs 保留扩展属性
-o, --owner 保留所有者(仅限superuser)
-g, --group 保留组
--devices 保留设备文件(仅限superuser)
--copy-devices 把设备文件内容当做文件一样进行复制处理
--specials 保留特殊文件
-D 和--devices --specials一样
-t, --times 保留修改时间
-O, --omit-dir-times 忽略文件夹的修改时间
-J, --omit-link-times 忽略符号链接的修改时间
--super 接收端尝试使用superuser进行操作
--fake-super 使用xattrs来存储和恢复权限属性
-S, --sparse 对稀疏文件进行特殊处理以节省空间
--preallocate 在写入前预分配DST文件
-n, --dry-run 执行一个没有实际更改的试运行,只会显示文件会被如何操作
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh,ssh方式进行数据同步
--rsync-path=PROGRAM 指定远程服务器上的rsync命令所在路径
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--ignore-existing 跳过更新已存在于DST的文件
--remove-source-files 发送方删除非文件夹的源文件
--del --delete-during的一个alias
--delete 删除那些DST中SRC没有的文件
--delete-before 传输前删除,而非传输过程中
--delete-during 在传输过程中删除
--delete-delay 在传输过程中确定要删除的,在传输结束后进行删除
--delete-after 在传输结束后删除,而非传输过程中
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--ignore-missing-args 忽略丢失的源参数不输出错误
--delete-missing-args 从DEST删除丢失的源参数
--ignore-errors 即使出现I/O错误也进行删除
--force 即使文件夹非空也强制删除
--max-delete=NUM 不删除超过指定数量的文件
--max-size=SIZE 不传输超过指定大小的文件
--min-size=SIZE 不传输小于指定大小的文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输(即断点续传)
--partial-dir=DIR 将因故没有完全传输的文件放到指定文件夹
--delay-updates 在传输末尾把所有更新的文件放到位
-m, --prune-empty-dirs 从文件列表中删除空目录链
--numeric-ids 不要把uid/gid值映射为用户/组名
--usermap=STRING 自定义用户名映射
--groupmap=STRING 自定义组名映射
--chown=USER:GROUP 简单的用户/组名映射
--timeout=SECONDS 设置I/O超时,单位为秒
--contimeout=SECONDS 设置Daemon连接超时,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和大小的文件
-M, --remote-option=OPTION 只把指定选项发送到远端
--size-only 只跳过大小相同的文件
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T, --temp-dir=DIR 在指定文件夹中创建临时文件
-y, --fuzzy 如果DEST没有任何文件,查找类似的文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
--copy-dest=DIR 和上面的类似,但是还会复制指定文件夹中的没有改变的文件
--link-dest=DIR 和上面类似,只是没有改变的文件会被硬链接到DST
-z, --compress 在传输过程中进行压缩
--compress-level=NUM 指定压缩级别0-9,默认为6
--skip-compress=LIST 跳过压缩文件后缀在指定列表中的文件
-C, --cvs-exclude 自动跳过CVS的生成文件
-f, --filter=RULE 添加一个文件过滤规则
-F 等于--filter='dir-merge /.rsync-filter'
重复的: --filter='- .rsync-filter'
--exclude=PATTERN 排除符合匹配规则的文件
--exclude-from=FILE 从指定文件中读取需要排除的文件
--include=PATTERN 包含(不排除)符合匹配规则的文件
--include-from=FILE 从指定文件中读取需要包含(不排除)的文件
--files-from=FILE 从指定文件中读取SRC源文件列表
-0, --from0 从文件中读取的文件名以'\0'终止
-s, --protect-args 没有空格分隔;只有通配符的特殊字符
--address=ADDRESS 绑定到指定的地址
--port=PORT 指定其他的rsync服务端口
--sockopts=OPTIONS 指定自定义的TCP选项
--blocking-io 对远程shell使用阻塞IO
--stats 提供某些文件的传输状态
-8, --8-bit-output 在输出中留下高比特的字符
-h, --human-readable 用人类可读的格式输出数字
--progress 在传输过程中显示进度
-P 等同于--partial --progress
-i, --itemize-changes 输出对所有更新的变更摘要
--out-format=FORMAT 用指定格式输出更新
--log-file=FILE 将日志保存到指定文件
--log-file-format=FMT 用指定格式更新日志
--password-file=FILE 从文件读取Daemon服务器密码
--list-only 不复制而是只列出
--bwlimit=RATE 限制套接字I/O带宽
--outbuf=N|L|B 设置输出缓冲,为None,Line或者Block
--write-batch=FILE 写入批量更新到指定文件
--only-write-batch=FILE 和上面类似,但是对DST进行只写的更新
--read-batch=FILE 从指定文件读取一个批量更新
--protocol=NUM 强制使用指定的老版本协议
--iconv=CONVERT_SPEC 对文件名进行字符编码转换
--checksum-seed=NUM 设置块/文件的校验和种子
-4, --ipv4 偏向于使用IPv4
-6, --ipv6 偏向于使用IPv6
--version 打印版本号
(-h) --help 显示帮助信息
参数 | 说明 | 默认值 |
address | 在独立运行时,用于指定的服务器运行的 IP 地址。由 xinetd 运行时将忽略此参数,使用命令行上的 –address 选项替代。 | 本地所有IP |
port | 指定 rsync 守护进程监听的端口号。 由 xinetd 运行时将忽略此参数,使用命令行上的–port 选项替代。 | 873 |
motd file | 指定一个消息文件,当客户连接服务器时该文件的内容显示给客户。 | 无 |
pid file | rsync 的守护进程将其 PID 写入指定的文件。 | 无 |
log file | 指定 rsync 守护进程的日志文件,而不将日志发送给 syslog。 | 无 |
syslog facility | 指定 rsync 发送日志消息给 syslog 时的消息级别。 | daemon |
socket options | 指定自定义 TCP 选项。 | 无 |
参数 | 说明 | 默认值 |
path | 指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的。 | 无 |
comment | 给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。 | 无 |
参数 | 说明 | 默认值 |
use chroot | 若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限,并且不能备份指向 path 外部的符号连接所指向的目录文件。 | true |
uid | 指定该模块以指定的 UID 传输文件。 | nobody |
gid | 指定该模块以指定的 GID 传输文件。 | nobody |
max connections | 指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。 | 0(没有限制) |
lock file | 指定支持 max connections 参数的锁文件。 | /var/run/rsyncd.lock |
list | 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块。 | true |
read only | 指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传。 | true |
write only | 指定是否允许客户下载文件。若为 true 则不允许下载;若为 false 并且服务器目录也具有读权限则允许下载。 | false |
ignore errors | 指定 在 rsync 服务器上运行 delete 操作时是否忽略 I/O 错误。一般来说 rsync 在出现 I/O 错误时将将跳过 –delete 操作,以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题。 | true |
ignore nonreadable | 指定 rysnc 服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些不应该被备份者获得的文件时是有意义的。 | false |
timeout | 该选项可以覆盖客户指定的 IP 超时时间。从而确保 rsync 服务器不会永远等待一个崩溃的客户端。对于匿名 rsync 服务器来说,理想的数字是 600(单位为秒)。 | 0 (未限制) |
dont compress | 用来指定那些在传输之前不进行压缩处理的文件。该选项可以定义一些不允许客户对该模块使用的命令选项列表。必须使用选项全名,而不能是简称。当发生拒绝某个选项的情况时,服务器将报告错误信息然后退出。例如,要防止使用压缩,应该是:"dont compress = *"。 | *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz |
参数 | 说明 | 默认值 |
exclude | 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式。 | 空 |
exclude from | 指定一个包含 exclude 规则定义的文件名,服务器从该文件中读取 exclude 列表定义。 | 空 |
include | 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 include 列表中。这等同于在客户端命令中使用 –include 来指定模式 。 | 空 |
include from | 指定一个包含 include 规则定义的文件名,服务器从该文件中读取 include 列表定义。 | 空 |
参数 | 说明 | 默认值 |
auth users | 指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。用户名和口令以明文方式存放在 secrets file 参数指定的文件中。 | (匿名方式) |
secrets file | 指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用。 | 空 |
strict modes | 指定是否监测口令文件的权限。若为 true 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件。 | true |
# 以 "#" 开始的行为注释行
username:passwd
# 一般来说口令最好不要超过8个字符。
参数 | 说明 | 默认值 |
hosts allow | 用一个主机列表指定哪些主机客户允许连接该模块。不匹配主机列表的主机将被拒绝。 | * |
hosts deny | 用一个主机列表指定哪些主机客户不允许连接该模块。 | 空 |
单个IP地址。例如:192.168.0.1
整个网段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0
可解析的单个主机名。例如:centos,centos.smartraining.cn
域内的所有主机。例如:*.smartraining.cn
"*"则表示所有。
多个列表项要用空格间隔。
6.日志参数参数 | 说明 | 默认值 |
transfer logging | 使 rsync 服务器将传输操作记录到传输日志文件。 | false |
log format | 指定传输日志文件的字段。 | "%o %h [%a] %m (%u) %f %l" |
%a - 远程IP地址
%h - 远程主机名
%l - 文件长度字符数
%p - 该次 rsync 会话的 PID
%o - 操作类型:"send" 或 "recv"
%f - 文件名
%P - 模块路径
%m - 模块名
%t - 当前时间
%u - 认证的用户名(匿名时是 null)
%b - 实际传输的字节数
%c - 当发送文件时,记录该文件的校验码
举个列子方便解释cat >/etc/rsyncd.conf<<'EOF'
#指定传输文件时守护进程具有的用户ID,这里表示默认为nobady
uid=nobady
#指定传输文件时守护进程具有的用户组ID,这里表示默认为nobady
gid=nobody
#禁止切换目录
use chroot=no
#客户端的最大连接数
max connection=10
#检查口令文件的权限,口令文件的权限用户属组必须是root,权限必须是600
strict modes=yes
#pid文件的位置
pid file=/var/run/rsyncd.pid
#lock文件的位置
lock file=/var/run/rsyncd.lock
#日志文件的位置
log file=/var/log/rsyncd.log
#定义模块名,这玩意就是客户端命令跟在IP后面的,作为DST的一部分
[plex]
#指定这个模块需要同步的路径,或者说作为base目录
path=/home/plex/movie
#这个是注释 可以自己定义
comment=plex library
#忽略一些无关的IO错误
ignore errors
#no代表客户端可以上传文件,yes表示只读取
read only=no
#no表示客户端可以下载文件,yes表示不能下载
write only=no
#表示允许连接的主机地址
hosts allow=1.2.3.4
#表示不允许连接的主机地址
hosts deny=*
#不允许该模块被客户端列出
list=false
#指定传输文件时守护进程具有的用户ID,
uid=root
#指定传输文件时守护进程具有的用户组ID,
gid=root
#用来指定连接该模块的用户名,用户名可以自定义,这个是客户端命令跟在IP前面那个
auth users=plex
#指定密码文件,文件里面记录的是用户名:密码
secrets file=/etc/srs.pass
EOF
echo "用户名:密码" >/etc/srs.pass
#权限必须600,不然GG
chmod 600 /etc/srs.pass
#开机启动
echo "rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local
#立即运行服务端,其实这儿的配置文件位置就是默认的,可以不加--config
rsync --daemon --config=/etc/rsyncd.conf
三. 客户端命令echo "密码" >/etc/rsyncd.pass
chmod 600 /etc/rsyncd.pass
rsync --list-only --password-file=/etc/rsyncd.pass plex@1.2.3.4::plex
rsync --list-only --password-file=/etc/rsyncd.pass rsync://plex@1.2.3.4/plex
然后手动同步我们可以这样(当然手动是可以不指定password-file的,反正会提示你输密码,如果写到脚本或者crontab里就必须带上了)rsync -avzP --delete --exclude "*.torrent" /home/complete/ plex@1.2.3.4::plex
rsync -avzP --delete /home/complete/ rsync://plex@1.2.3.4/plex
P参数是给你看着玩的,不然鬼知道同步到啥程度了,写脚本里就别带了,单向传输脚本里如果要那个断点续传请自己做好命令返回状态的判断,因为单向传输是一次性的,如果是同步就没必要了,毕竟你会隔阵子就运行问题一:
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端的目录不存在或无权限,创建目录并修正权限可解决问题
问题二:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端该模块(backup)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败
提供正确的用户名密码解决此问题
问题三:
@ERROR: Unknown module 'backup'
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题
问题四:
password file must not beother-accessible
continuing without password file
Password:
原因:
这是因为rsyncd.pwd rsyncd.secrets的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd
问题五:
rsync: failed to connect to218.107.243.2: No route to host (113)
rsync error: error in socket IO(code 10) at clientserver.c(104) [receiver=2.6.9]
原因:
对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcp udp的873端口打开
问题六:
rsync error: error startingclient-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
原因:
/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件
问题七:
rsync: chown "" failed:Invalid argument (22)
原因:
权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)
问题八:
@ERROR: daemon security issue –contact admin
rsync error: error starting client-server protocol (code 5) at main.c(1530)[sender=3.0.6]
原因:
同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。掠过软连接文件
$ sudo rsync -zvh /home/jack/computer-networking.pdf /opt/test/
computer-networking.pdf
sent 1.01K bytes received 35 bytes 2.10K bytes/sec
total size is 3.03K speedup is 2.89
-z: 压缩$ sudo rsync -zavh /home/jack/ /opt/backup/
sending incremental file list
./
.bash_history
.bash_logout
.bashrc
.lesshst
.profile
.sudo_as_admin_successful
.viminfo
computer-networking.pdf
.ssh/
.ssh/known_hosts
sent 4.85K bytes received 198 bytes 10.10K bytes/sec
total size is 9.59K speedup is 1.90
-a: 在复制/同步过程中存档数据$ ls /opt/backup/ -la
total 40
drwxr-xr-x 3 jack jack 4096 Thg 6 15 16:02 .
drwxr-xr-x 4 root root 4096 Thg 6 15 16:25 ..
-rw------- 1 jack jack 817 Thg 6 15 16:01 .bash_history
-rw-r--r-- 1 jack jack 220 Thg 6 11 15:58 .bash_logout
-rw-r--r-- 1 jack jack 3771 Thg 6 11 15:58 .bashrc
-rw-rw-r-- 1 jack jack 3028 Thg 2 25 2017 computer-networking.pdf
-rw------- 1 jack jack 40 Thg 6 15 15:51 .lesshst
-rw-r--r-- 1 jack jack 807 Thg 6 11 15:58 .profile
drwx------ 2 jack jack 4096 Thg 6 13 17:58 .ssh
-rw-r--r-- 1 jack jack 0 Thg 6 15 16:02 .sudo_as_admin_successful
-rw------- 1 jack jack 680 Thg 6 14 16:50 .viminfo
使用特定端口通过 ssh 进行 Rsync$ rsync -avz -e "ssh -p 22" cas@10.9.8.41:/home/cas/deploy.yaml /home/jack/
cas@10.9.8.41's password:
receiving incremental file list
sent 20 bytes received 60 bytes 32.00 bytes/sec
total size is 239 speedup is 2.99
从本地机器复制/同步文件和目录到远程机器$ rsync -azrvh /home/jack/computer-networking.pdf cas@10.9.8.41:
cas@10.9.8.41's password:
sending incremental file list
computer-networking.pdf
sent 1.04K bytes received 35 bytes 430.80 bytes/sec
total size is 3.03K speedup is 2.81
-r: 递归复制$ rsync -zavhr cas@10.9.8.41:document /home/jack
cas@10.9.8.41's password:
receiving incremental file list
document/
document/kubernetes.txt
sent 47 bytes received 139 bytes 74.40 bytes/sec
total size is 0 speedup is 0.00
rsync -include 和 -exclude 选项$ rsync -avhz -e "ssh -p 22" --include 'k*' --exclude '*' cas@10.9.8.41: /home/jack
cas@10.9.8.41's password:
receiving incremental file list
./
k8s.yaml
kubernetes.yaml
kuber/
sent 88 bytes received 280 bytes 147.20 bytes/sec
total size is 73 speedup is 0.20
设置最大文件大小$ rsync -zavhr --max-size='200k' cas@10.9.8.41: /home/jack
cas@10.9.8.41's password:
receiving incremental file list
.bash_history
.bash_logout
.bashrc
.profile
.sudo_as_admin_successful
.viminfo
computer-networking.pdf
sent 2.58K bytes received 51.60K bytes 21.67K bytes/sec
total size is 113.24K speedup is 2.09
传输成功后删除源文件$ ls /home/directory
computer-networking.pdf deploy.yaml document k8s.yaml kuber kubernetes.yaml
------
$ rsync -azvh --remove-source-files /home/jack/deploy.yaml cas@10.9.8.41:
cas@10.9.8.41's password:
sending incremental file list
sent 70 bytes received 20 bytes 36.00 bytes/sec
total size is 239 speedup is 2.66
再次运行'ls'命令,可以看到SRC上的'deploy.yaml'文件被删除了。
$ ls
computer-networking.pdf document k8s.yaml kuber kubernetes.yaml
查找src和dest在文件和目录上的区别$ rsync -avzi /home/jack/cloud cas@10.9.8.41:
cas@10.9.8.41's password:
sending incremental file list
cd+++++++++ cloud/
限制带宽$ rsync -avzh --bwlimit=300 /home/jack/coursera.png cas@10.9.8.41:
cas@10.9.8.41's password:
sending incremental file list
coursera.png
sent 2.93M bytes received 35 bytes 234.48K bytes/sec
total size is 3.00M speedup is 1.02
scp失败时恢复传输$ scp /home/jack/ubuntu-18.04.4-live-server-amd64.iso cas@10.9.8.41:
cas@10.9.8.41's password:
ubuntu-18.04.4-live-server-amd64.iso 32% 278MB 86.7MB/s 00:06 ETA
该进程已被用户杀死。当时,传输了 32% 的文件。现在,您可以通过运行 rsync 继续当前的工作:$ rsync -P -avzh ubuntu-18.04.4-live-server-amd64.iso cas@10.9.8.41:
cas@10.9.8.41's password:
sending incremental file list
ubuntu-18.04.4-live-server-amd64.iso
912.26M 100% 15.89MB/s 0:00:54 (xfr#1, to-chk=0/1)
sent 541.25M bytes received 132.44K bytes 9.25M bytes/sec
total size is 912.26M speedup is 1.69
rsync 命令恢复传输文件$ rsync -avh --progress /home/jack/cloud/ cas@10.9.8.41:
cas@10.9.8.41's password:
sending incremental file list
./
computer-networking.pdf
3.03K 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=8/10)
coursera.png
3.00M 100% 114.38MB/s 0:00:00 (xfr#2, to-chk=7/10)
k8s.yaml
39 100% 1.52kB/s 0:00:00 (xfr#3, to-chk=6/10)
kubernetes.yaml
34 100% 1.33kB/s 0:00:00 (xfr#4, to-chk=5/10)
ubuntu-18.04.4-live-server-amd64.iso
912.26M 100% 89.60MB/s 0:00:09 (xfr#5, to-chk=4/10)
document/
document/kubernetes.txt
0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=1/10)
kuber/
kuber/test.txt
0 100% 0.00kB/s 0:00:00 (xfr#7, to-chk=0/10)
sent 915.49M bytes received 164 bytes 79.61M bytes/sec
total size is 915.26M speedup is 1.00
cd Program Files\VMware\Infrastructure\VMware\CIS\vmdird
运行 c:\Program Files\VMware\Infrastructure\VMware\CIS\vmdird\vdcadmintool.exe
该控制台载入:cn=Administrator,cn=users,dc=vSphere,dc=local
此时新密码即生成。/usr/lib/vmware-vmdir/bin/vdcadmintool
cn=Administrator,cn=users,dc=vSphere,dc=local
或者administrator@vsphere.local
新密码即生成。vmrun -T ws start "/opt/VMware/win2k8r2.vmx" nogui
# 启动无图形界面虚拟机 vmrun start "/opt/VMware/win2k8r2.vmx" gui
# 启动带图形界面虚拟机vmrun stop "/opt/VMware/win2k8r2.vmx" hard | soft
# 强制关闭虚拟机(相当于直接关电源) | 正常关闭虚拟机vmrun reset "/opt/VMware/win2k8r2.vmx" hard | soft
# 冷重启虚拟机 | 热重启虚拟机vmrun suspend "/opt/VMware/win2k8r2.vmx" hard | soft
# 挂起虚拟机(可能相当于休眠)vmrun pause "/opt/VMware/win2k8r2.vmx"
# 暂停虚拟机vmrun unpause "/opt/VMware/win2k8r2.vmx"
# 停止暂停虚拟机 vmrun list
# 列出正在运行的虚拟机ps aux | grep vmx
# 另一种查看正在运行虚拟机的方法vmrun -T ws snapshot "/opt/VMware/win2k8r2.vmx" snapshotName
# 创建一个快照(snapshotName 快照名)vmrun -T ws reverToSnapshot "/opt/VMware/win2k8r2.vmx" snapshotName
# 从一个快照中恢复虚拟机(snapshotName 快照名)vmrun -T ws listSnapshots "/opt/VMware/win2k8r2.vmx"
# 列出虚拟机快照数量及名称vmrun -T ws deleteSnapshot "/opt/VMware/win2k8r2.vmx" snapshotName
# 删除一个快照(snapshotName 快照名)vmrun start "d:\\centos\\qs.vmx" nogui 无界面启动
vmrun start "d:\\centos\\qs.vmx" gui 图形化界面启动
vmrun list 列出正在运行的虚拟机
vmrun stop "d:\\centos\\qs.vmx" soft 正常关闭虚拟机
vmrun stop "d:\\centos\\qs.vmx" hard 强制关闭虚拟机
vmrun reset "d:\\centos\\qs.vmx" soft 热重启虚拟机
vmrun reset "d:\\centos\\qs.vmx" hard 冷重启虚拟机
vmrun sudpend "d:\\centos\\qs.vmx" soft 热挂起(休眠)
vmrun sudpend "d:\\centos\\qs.vmx" hard 冷挂起(休眠)
vmrun pause "d:\\centos\\qs.vmx" 暂停虚拟机
vmrun listsnapshots "d:\\centos\\qs.vmx" 查看某虚拟机有多少快照
vmrun snapshot "d:\\centos\\qs.vmx" snapshotcmdtest 创建快照
vmrun deleteSnapshot "d:\\centos\\qs.vmx" snapshotcmdtest 删除一个快照
vmrun revertToSnapshot "d:\\centos\\qs.vmx" snapshotcmdtest 从快照中恢复
Invalid argument: --help vmrun -T ws start "c:\my VMs\myVM.vmx"
Stopping a virtual machine on an ESX host vmrun -T esx -h https://myHost.com/sdk -u hostUser -p hostPassword stop "[storage1] vm/myVM.vmx"
Running a program in a virtual machine with Workstation on a Windows host with Windows guestvmrun -T ws -gu guestUser -gp guestPassword runProgramInGuest "c:\my VMs\myVM.vmx" "c:\Program Files\myProgram.exe"
Running a program in a virtual machine with Server on a Linux host with Linux guestvmrun -T server -h https://myHost.com:8333/sdk -u hostUser -p hostPassword -gu guestUser -gp guestPassword runProgramInGuest "
[standard] vm/myVM.vmx" /usr/bin/X11/xclock -display :0 vmrun -T ws snapshot "c:\my VMs\myVM.vmx" mySnapshot
Reverting to a snapshot with Workstation on a Windows host vmrun -T ws revertToSnapshot "c:\my VMs\myVM.vmx" mySnapshot
Deleting a snapshot with Workstation on a Windows host vmrun -T ws deleteSnapshot "c:\my VMs\myVM.vmx" mySnapshot
Enabling Shared Folders with Workstation on a Windows host vmrun -T ws enableSharedFolders "c:\my VMs\myVM.vmx"
VBoxManage list vms
查看虚拟的详细信息VBoxManage list vms --long
查看运行着的虚拟机VBoxManage list runningvms
开启虚拟机在后台运行VBoxManage startvm backup -type headless
开启虚拟机并开启远程桌面连接的支持VBoxManage startvm <vm_name> -type vrdp
改变虚拟机的远程连接端口,用于多个vbox虚拟机同时运行VBoxManage controlvm <vm_name> vrdpprot <ports>
关闭虚拟机VBoxManage controlvm <vm_name> acpipowerbutton
强制关闭虚拟机VBoxManage controlvm <vm_name> poweroff
杀掉某个虚拟机的进程方法(强制关闭虚拟机)ps -aux|grep virtualbox
会查出如下 信息:(蓝色背景文字 为 进程id 和 虚拟机名)kill -9 194999
$ sed -i '$adeb http://download.virtualbox.org/virtualbox/debian xenial contrib' /etc/apt/sources.list
为apt-secure导入公钥:$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
通过apt安装VirtualBox和dkms,其中dkms包可以确保在下次通过apt upgrade更新内核时,VirtualBox的内核模块也正确地更新:$ sudo apt-get update
$ sudo apt-get install virtualbox-5.1 dkms
安装Oracle VM VirtualBox扩展包$ axel -a -n 16 "http://download.virtualbox.org/virtualbox/5.1.6/Oracle_VM_VirtualBox_Extension_Pack-5.1.6-110634.vbox-extpack"
然后打开VirtualBox,在管理-全局设定-扩展中选择添加新包。[root@mx ~]# curl -h
Usage: curl [options...] <url>
Options: (H) means HTTP/HTTPS only, (F) means FTP only
--anyauth Pick "any" authentication method (H)
-a, --append Append to target file when uploading (F/SFTP)
--basic Use HTTP Basic Authentication (H)
--cacert FILE CA certificate to verify peer against (SSL)
--capath DIR CA directory to verify peer against (SSL)
-E, --cert CERT[:PASSWD] Client certificate file and password (SSL)
--cert-type TYPE Certificate file type (DER/PEM/ENG) (SSL)
--ciphers LIST SSL ciphers to use (SSL)
--compressed Request compressed response (using deflate or gzip)
-K, --config FILE Specify which config file to read
--connect-timeout SECONDS Maximum time allowed for connection
-C, --continue-at OFFSET Resumed transfer offset
-b, --cookie STRING/FILE String or file to read cookies from (H)
-c, --cookie-jar FILE Write cookies to this file after operation (H)
--create-dirs Create necessary local directory hierarchy
--crlf Convert LF to CRLF in upload
--crlfile FILE Get a CRL list in PEM format from the given file
-d, --data DATA HTTP POST data (H)
--data-ascii DATA HTTP POST ASCII data (H)
--data-binary DATA HTTP POST binary data (H)
--data-urlencode DATA HTTP POST data url encoded (H)
--delegation STRING GSS-API delegation permission
--digest Use HTTP Digest Authentication (H)
--disable-eprt Inhibit using EPRT or LPRT (F)
--disable-epsv Inhibit using EPSV (F)
-D, --dump-header FILE Write the headers to this file
--egd-file FILE EGD socket path for random data (SSL)
--engine ENGINGE Crypto engine (SSL). "--engine list" for list
-f, --fail Fail silently (no output at all) on HTTP errors (H)
-F, --form CONTENT Specify HTTP multipart POST data (H)
--form-string STRING Specify HTTP multipart POST data (H)
--ftp-account DATA Account data string (F)
--ftp-alternative-to-user COMMAND String to replace "USER [name]" (F)
--ftp-create-dirs Create the remote dirs if not present (F)
--ftp-method [MULTICWD/NOCWD/SINGLECWD] Control CWD usage (F)
--ftp-pasv Use PASV/EPSV instead of PORT (F)
-P, --ftp-port ADR Use PORT with given address instead of PASV (F)
--ftp-skip-pasv-ip Skip the IP address for PASV (F)
--ftp-pret Send PRET before PASV (for drftpd) (F)
--ftp-ssl-ccc Send CCC after authenticating (F)
--ftp-ssl-ccc-mode ACTIVE/PASSIVE Set CCC mode (F)
--ftp-ssl-control Require SSL/TLS for ftp login, clear for transfer (F)
-G, --get Send the -d data with a HTTP GET (H)
-g, --globoff Disable URL sequences and ranges using {} and []
-H, --header LINE Custom header to pass to server (H)
-I, --head Show document info only
-h, --help This help text
--hostpubmd5 MD5 Hex encoded MD5 string of the host public key. (SSH)
-0, --http1.0 Use HTTP 1.0 (H)
--ignore-content-length Ignore the HTTP Content-Length header
-i, --include Include protocol headers in the output (H/F)
-k, --insecure Allow connections to SSL sites without certs (H)
--interface INTERFACE Specify network interface/address to use
-4, --ipv4 Resolve name to IPv4 address
-6, --ipv6 Resolve name to IPv6 address
-j, --junk-session-cookies Ignore session cookies read from file (H)
--keepalive-time SECONDS Interval between keepalive probes
--key KEY Private key file name (SSL/SSH)
--key-type TYPE Private key file type (DER/PEM/ENG) (SSL)
--krb LEVEL Enable Kerberos with specified security level (F)
--libcurl FILE Dump libcurl equivalent code of this command line
--limit-rate RATE Limit transfer speed to this rate
-l, --list-only List only names of an FTP directory (F)
--local-port RANGE Force use of these local port numbers
-L, --location Follow redirects (H)
--location-trusted like --location and send auth to other hosts (H)
-M, --manual Display the full manual
--mail-from FROM Mail from this address
--mail-rcpt TO Mail to this receiver(s)
--mail-auth AUTH Originator address of the original email
--max-filesize BYTES Maximum file size to download (H/F)
--max-redirs NUM Maximum number of redirects allowed (H)
-m, --max-time SECONDS Maximum time allowed for the transfer
--metalink Process given URLs as metalink XML file
--negotiate Use HTTP Negotiate Authentication (H)
-n, --netrc Must read .netrc for user name and password
--netrc-optional Use either .netrc or URL; overrides -n
--netrc-file FILE Set up the netrc filename to use
-N, --no-buffer Disable buffering of the output stream
--no-keepalive Disable keepalive use on the connection
--no-sessionid Disable SSL session-ID reusing (SSL)
--noproxy List of hosts which do not use proxy
--ntlm Use HTTP NTLM authentication (H)
-o, --output FILE Write output to <file> instead of stdout
--pass PASS Pass phrase for the private key (SSL/SSH)
--post301 Do not switch to GET after following a 301 redirect (H)
--post302 Do not switch to GET after following a 302 redirect (H)
--post303 Do not switch to GET after following a 303 redirect (H)
-#, --progress-bar Display transfer progress as a progress bar
--proto PROTOCOLS Enable/disable specified protocols
--proto-redir PROTOCOLS Enable/disable specified protocols on redirect
-x, --proxy [PROTOCOL://]HOST[:PORT] Use proxy on given port
--proxy-anyauth Pick "any" proxy authentication method (H)
--proxy-basic Use Basic authentication on the proxy (H)
--proxy-digest Use Digest authentication on the proxy (H)
--proxy-negotiate Use Negotiate authentication on the proxy (H)
--proxy-ntlm Use NTLM authentication on the proxy (H)
-U, --proxy-user USER[:PASSWORD] Proxy user and password
--proxy1.0 HOST[:PORT] Use HTTP/1.0 proxy on given port
-p, --proxytunnel Operate through a HTTP proxy tunnel (using CONNECT)
--pubkey KEY Public key file name (SSH)
-Q, --quote CMD Send command(s) to server before transfer (F/SFTP)
--random-file FILE File for reading random data from (SSL)
-r, --range RANGE Retrieve only the bytes within a range
--raw Do HTTP "raw", without any transfer decoding (H)
-e, --referer Referer URL (H)
-J, --remote-header-name Use the header-provided filename (H)
-O, --remote-name Write output to a file named as the remote file
--remote-name-all Use the remote file name for all URLs
-R, --remote-time Set the remote file's time on the local output
-X, --request COMMAND Specify request command to use
--resolve HOST:PORT:ADDRESS Force resolve of HOST:PORT to ADDRESS
--retry NUM Retry request NUM times if transient problems occur
--retry-delay SECONDS When retrying, wait this many seconds between each
--retry-max-time SECONDS Retry only within this period
-S, --show-error Show error. With -s, make curl show errors when they occur
-s, --silent Silent mode. Don't output anything
--socks4 HOST[:PORT] SOCKS4 proxy on given host + port
--socks4a HOST[:PORT] SOCKS4a proxy on given host + port
--socks5 HOST[:PORT] SOCKS5 proxy on given host + port
--socks5-basic Enable username/password auth for SOCKS5 proxies
--socks5-gssapi Enable GSS-API auth for SOCKS5 proxies
--socks5-hostname HOST[:PORT] SOCKS5 proxy, pass host name to proxy
--socks5-gssapi-service NAME SOCKS5 proxy service name for gssapi
--socks5-gssapi-nec Compatibility with NEC SOCKS5 server
-Y, --speed-limit RATE Stop transfers below speed-limit for 'speed-time' secs
-y, --speed-time SECONDS Time for trig speed-limit abort. Defaults to 30
--ssl Try SSL/TLS (FTP, IMAP, POP3, SMTP)
--ssl-reqd Require SSL/TLS (FTP, IMAP, POP3, SMTP)
-2, --sslv2 Use SSLv2 (SSL)
-3, --sslv3 Use SSLv3 (SSL)
--ssl-allow-beast Allow security flaw to improve interop (SSL)
--stderr FILE Where to redirect stderr. - means stdout
--tcp-nodelay Use the TCP_NODELAY option
-t, --telnet-option OPT=VAL Set telnet option
--tftp-blksize VALUE Set TFTP BLKSIZE option (must be >512)
-z, --time-cond TIME Transfer based on a time condition
-1, --tlsv1 Use => TLSv1 (SSL)
--tlsv1.0 Use TLSv1.0 (SSL)
--tlsv1.1 Use TLSv1.1 (SSL)
--tlsv1.2 Use TLSv1.2 (SSL)
--tlsv1.3 Use TLSv1.3 (SSL)
--tls-max VERSION Use TLS up to VERSION (SSL)
--trace FILE Write a debug trace to the given file
--trace-ascii FILE Like --trace but without the hex output
--trace-time Add time stamps to trace/verbose output
--tr-encoding Request compressed transfer encoding (H)
-T, --upload-file FILE Transfer FILE to destination
--url URL URL to work with
-B, --use-ascii Use ASCII/text transfer
-u, --user USER[:PASSWORD] Server user and password
--tlsuser USER TLS username
--tlspassword STRING TLS password
--tlsauthtype STRING TLS authentication type (default SRP)
--unix-socket FILE Connect through this UNIX domain socket
-A, --user-agent STRING User-Agent to send to server (H)
-v, --verbose Make the operation more talkative
-V, --version Show version number and quit
-w, --write-out FORMAT What to output after completion
--xattr Store metadata in extended file attributes
-q If used as the first parameter disables .curlrc
[root@mx ~]#
curl在Mac和Linux下是自带的命令行工具,如果你也想在Windows上使用,这里推荐使用"git for windows"这个工具,你可以使用此关键字在网络上检索下载。[root@mx ~]# curl www.baidu.com
[root@mx ~]# curl -s https://www.baidu.com -o 1.txt
# 不使用-s时,显示进度信息
[root@mx ~]# curl https://www.baidu.com -o 2.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2443 100 2443 0 0 14183 0 --:--:-- --:--:-- --:--:-- 14203
[root@mx ~]# cat 1.txt
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head
......
[root@mx ~]#
$ curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com
下面命令会移除User-Agent标头。$ curl -A '' https://google.com
也可以通过-H参数直接指定标头,更改User-Agent。$ curl -H 'User-Agent: php/1.0' https://google.com
-b 选项:$ curl -b 'foo=bar' https://google.com
上面命令会生成一个标头Cookie: foo=bar,向服务器发送一个名为foo、值为bar的 Cookie。$ curl -b 'foo1=bar;foo2=bar2' https://google.com
上面命令发送两个 Cookie。$ curl -b cookies.txt https://www.google.com
上面命令读取本地文件cookies.txt,里面是服务器设置的 Cookie(参见-c参数),将其发送到服务器。$ curl -c cookies.txt https://www.google.com
上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt。$ curl -d'login=emma&password=123'-X POST https://google.com/login
#或者
$ curl -d 'login=emma' -d 'password=123' -X POST https://google.com/login
使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST。$ curl -d '@data.txt' https://google.com/login
上面命令读取data.txt文件的内容,作为数据体向服务器发送。$ curl --data-urlencode 'comment=hello world' https://google.com/login
上面代码中,发送的数据hello world之间有一个空格,需要进行 URL 编码。curl -e 'https://google.com?q=example' https://www.example.com
上面命令将Referer标头设为https://google.com?q=example。引用curl -H 'Referer: https://google.com?q=example' https://www.example.com-F 参数:
$ curl -F 'file=@photo.png' https://google.com/profile
上面命令会给 HTTP 请求加上标头Content-Type: multipart/form-data,然后将文件photo.png作为file字段上传。$ curl -F 'file=@photo.png;type=image/png' https://google.com/profile
上面命令指定 MIME 类型为image/png,否则 curl 会把 MIME 类型设为application/octet-stream。$ curl -F 'file=@photo.png;filename=me.png' https://google.com/profile
上面命令中,原始文件名为photo.png,但是服务器接收到的文件名为me.png。$ curl -G -d 'q=kitties' -d 'count=20' https://google.com/search
上面命令会发出一个 GET 请求,实际请求的 URL 为https://google.com/search?q=kitties&count=20。如果省略--G,会发出一个 POST 请求。$ curl -G --data-urlencode 'comment=hello world' https://www.example.com
-H 选项:$ curl -H 'Accept-Language: en-US' https://google.com
上面命令添加 HTTP 标头Accept-Language: en-US。$ curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com
上面命令添加两个 HTTP 标头。$ curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login
$ curl -i https://www.example.com
上面命令收到服务器回应后,先输出服务器回应的标头,然后空一行,再输出网页的源码。$ curl -I https://www.example.com
上面命令输出服务器对 HEAD 请求的回应。$ curl --head https://www.example.com
-k 参数:$ curl -k https://www.example.com
上面命令不会检查服务器的 SSL 证书是否正确。$ curl -L -d 'tweet=hi' https://api.twitter.com/tweet
--limit-rate 选项:$ curl --limit-rate 200k https://google.com
上面命令将带宽限制在每秒 200K 字节。$ curl -o example.html https://www.example.com
上面命令将www.example.com保存成example.html。$ curl -O https://www.example.com/foo/bar.html
上面命令将服务器回应保存成文件,文件名为bar.html。$ curl -s https://www.example.com
上面命令一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。$ curl -s -o /dev/null https://google.com
-S 选项:$ curl -s -o /dev/null https://google.com
上面命令没有任何输出,除非发生错误。$ curl -u 'bob:12345' https://google.com/login
上面命令设置用户名为bob,密码为12345,然后将其转为 HTTP 标头Authorization: Basic Ym9iOjEyMzQ1。$ curl https://bob:12345@google.com/login
上面命令能够识别 URL 里面的用户名和密码,将其转为上个例子里面的 HTTP 标头。$ curl -u 'bob' https://google.com/login
上面命令只设置了用户名,执行后,curl 会提示用户输入密码。$ curl -v https://www.example.com
--trace参数也可以用于调试,还会输出原始的二进制数据。$ curl --trace - https://www.example.com
-x 选项:$ curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com
上面命令指定 HTTP 请求通过myproxy.com:8080的 socks5 代理发出。$ curl -x james:cats@myproxy.com:8080 https://www.example.com
上面命令中,请求的代理使用 HTTP 协议。$ curl -X POST https://www.example.com
上面命令对https://www.example.com发出 POST 请求。$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); //限制响应时间200毫秒
$data = curl_exec($ch);
curl_close($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); //限制响应时间200毫秒
$data = curl_exec($ch);
if($data === false){ //抓取错误信息
print_r('---------------------start------------------------'.PHP_EOL);
var_dump(curl_errno($ch));
var_dump(curl_error($ch));
print_r('---------------------end------------------------');
exit();
}
curl_close($ch);
然后我们发现它告诉我们errno:28 超时了!!!curl_setopt($ch, CURLOPT_TIMEOUT_MS, 600); //限制响应时间600毫秒
还是超时!curl_setopt($ch, CURLOPT_TIMEOUT, 1); //限制响应时间1秒
成功了!那么问题就出在CURLOPT_TIMEOUT_MS上面了! curl_setopt($ch, CURLOPT_NOSIGNAL, true);//libcurl支持毫秒
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200);
use yii\httpclient\Client;
$client = new Client([
'formatters' => [
'myformat' => 'app\components\http\MyFormatter', // add new formatter
Client::FORMAT_XML => 'app\components\http\MyXMLFormatter', // override default XML formatter
],
]);
在创建自定义的解析器时,应该实现 yii\httpclient\ParserInterface ,同时创建formatter - yii\httpclient\FormatterInterface。 例如:use yii\httpclient\FormatterInterface;
use yii\httpclient\ParserInterface;
use yii\httpclient\Response;
class ParserIni implements ParserInterface
{
public function parse(Response $response)
{
return parse_ini_string($response->content);
}
}
class FormatterIni implements FormatterInterface
{
public function format(Request $request)
{
$request->getHeaders()->set('Content-Type', 'text/ini ; charset=UTF-8');
$pairs = []
foreach ($request->data as $name => $value) {
$pairs[] = "$name=$value";
}
$request->setContent(implode("\n", $pairs));
return $request;
}
}