1、curl 和 wget 区别
wget 和 cURL 都可以下载内容。它们的核心就是这么设计的。它们都可以向互联网发送请求并返回请求项。这可以是文件、图片或者是其他诸如网站的原始 HTML 之类。
这两个程序都可以进行 HTTP POST 请求。这意味着它们都可以向网站发送数据,比如说填充表单什么的。
由于这两者都是命令行工具,它们都被设计成可脚本化。wget 和 cURL 都可以写进你的 Bash 脚本 ,自动与新内容交互,下载所需内容。
- 1. curl 是 libcurl 这个库支持的,wget 是一个纯粹的命令行命令。
- 2. curl 在指定要下载的链接时能够支持 URL 的序列或集合,而 wget 则不能这样;
- 3. wget 支持 递归下载,而 curl 则没有这个功能。
- 4. curl 由于可自定义各种请求参数,所以在 模拟 web 请求 方面更擅长;cURL是一个多功能工具。当然,它可以下载网络内容,但同时它也能做更多别的事情。cURL 技术支持库是:libcurl。这就意味着你可以基于 cURL 编写整个程序,允许你基于 libcurl 库中编写图形环境的下载程序,访问它所有的功能。cURL 宽泛的网络协议支持可能是其最大的卖点。cURL 支持访问 HTTP 和 HTTPS 协议,能够处理 FTP 传输。它支持 LDAP 协议,甚至支持 Samba 分享。实际上,你还可以用 cURL 收发邮件。cURL 也有一些简洁的安全特性。cURL 支持安装许多 SSL/TLS 库,也支持通过网络代理访问,包括 SOCKS。这意味着,你可以越过 Tor 来使用cURL。cURL 同样支持让数据发送变得更容易的 gzip 压缩技术。
- 5. wget 由于支持 ftp 和 Recursive(递归)下载, 所以在下载文件方面更擅长。wget 简单直接。这意味着你能享受它超凡的下载速度。wget 是一个独立的程序,无需额外的资源库,更不会做其范畴之外的事情。wget 是专业的直接下载程序,支持递归下载。同时,它也允许你下载网页中或是 FTP 目录中的任何内容。wget 拥有智能的默认设置。它规定了很多在常规浏览器里的事物处理方式,比如 cookies 和重定向,这都不需要额外的配置。可以说,wget 简直就是无需说明,开罐即食!
类比的话,可以把 curl 看做是一个精简的命令行网页浏览器。它支持几乎你能想到的所有协议,curl 宽泛的网络协议支持可能是其最大的卖点(curl支持更多的协议。curl supports FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, POP3, IMAP, SMTP and RTSP at the time of this writing. Wget supports HTTP, HTTPS and FTP.)。curl 支持访问 HTTP 和 HTTPS 协议,能够处理 FTP 传输。它支持 LDAP 协议,甚至支持 Samba 分享。实际上,你还可以用 cURL 收发邮件。curl 可以交互访问几乎所有在线内容。唯一和浏览器不同的是,curl 不会渲染接收到的相应信息。而 wget 可以看做是 迅雷9 。
应该使用 cURL 还是使用 wget?这个比较得看实际用途。如果你想快速下载并且没有担心参数标识的需求,那你应该使用轻便有效的 wget。如果你想做一些更复杂的使用,直觉告诉你,你应该选择 cRUL。
curl 与 wget 高级用法
2、wget 命令
wget 是在 Linux 下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括 Windows 在内的各个平台上。 wget 是一个下载文件的工具,它用在命令行下。对于 Linux 用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器。
wget 工具体积小但功能完善,它支持断点下载功能,同时支持 FTP 和 HTTP下载方式,支持代理服务器和设置起来方便简单。
它有以下功能和特点:
- (1)支持断点下传功能;这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了;
- (2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件;
- (3)支持代理服务器;对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;
- (4)设置方便简单;可能,习惯图形界面的用户已经不是太习惯命令行了,但是,命令行在设置上其实有更多的优点,最少,鼠标可以少点很多次,也不要担心是否错点鼠标;
- (5)程序小,完全免费;程序小可以考虑不计,因为现在的硬盘实在太大了;完全免费就不得不考虑了,即使网络上有很多免费软件,但是,这些软件的广告不是我们喜欢的;
wget 参数
更多参数:man wget
wget -h 或者 wget --help
命令格式:
wget [参数列表] [目标软件、网页的网址] // 用法: wget [选项]... [URL]...
长选项所必须的参数在使用短选项时也是必须的。
启动:
-V, --version 显示 Wget 的版本信息并退出
-h, --help 打印此帮助
-b, --background 启动后转入后台
-e, --execute=命令 运行一个“.wgetrc”风格的命令
日志和输入文件:
-o, --output-file=文件 将日志信息写入 FILE
-a, --append-output=文件 将信息添加至 FILE
-d, --debug 打印大量调试信息
-q, --quiet 安静模式 (无信息输出)
-v, --verbose 详尽的输出 (此为默认值)
-nv, --no-verbose 关闭详尽输出,但不进入安静模式
--report-speed=类型 以 <类型> 报告带宽。类型可以是 bits
-i, --input-file=文件 下载本地或外部 <文件> 中的 URL
-F, --force-html 把输入文件当成 HTML 文件
-B, --base=URL 解析相对于 URL 的 HTML 输入文件链接 (-i -F)
--config=文件 指定要使用的配置文件
--no-cookies 不读取任何配置文件
--rejected-log=文件 将拒绝 URL 的原因写入 <文件>。
下载:
-t, --tries=数字 设置重试次数为 <数字> (0 代表无限制)
--retry-connrefused 即使拒绝连接也是重试
-O, --output-document=文件 将文档写入 FILE
-nc, --no-clobber 不要下载已存在将被覆盖的文件
-c, --continue 断点续传下载文件
--start-pos=偏移量 从由零计数的 <偏移量> 开始下载
--progress=类型 选择进度条类型
--show-progress 在任意啰嗦状态下都显示进度条
-N, --timestamping 只获取比本地文件新的文件
--no-if-modified-since 不要在时间戳 (timestamping) 模式下使用
if-modified-since get 条件请求
--no-use-server-timestamps don't set the local file's timestamp by
the one on the server
-S, --server-response 打印服务器响应
--spider 不下载任何文件
-T, --timeout=SECONDS 将所有超时设为 SECONDS 秒
--dns-timeout=SECS 设置 DNS 查寻超时为 SECS 秒
--connect-timeout=SECS 设置连接超时为 SECS 秒
--read-timeout=SECS 设置读取超时为 SECS 秒
-w, --wait=SECONDS 等待间隔为 SECONDS 秒
--waitretry=SECONDS 在获取文件的重试期间等待 1..SECONDS 秒
--random-wait 获取多个文件时,每次随机等待间隔 (0.5~1.5)*WAIT 秒
--no-proxy 禁止使用代理
-Q, --quota=数字 设置获取配额为 <数字> 字节
--bind-address=ADDRESS 绑定至本地主机上的 ADDRESS (主机名或是 IP)
--limit-rate=RATE 限制下载速率为 RATE
--no-dns-cache 关闭 DNS 查询缓存
--restrict-file-names=系统 限定文件名中的字符为 <系统> 允许的字符
--ignore-case 匹配文件/目录时忽略大小写
-4, --inet4-only 仅连接至 IPv4 地址
-6, --inet6-only 仅连接至 IPv6 地址
--prefer-family=地址族 首先连接至指定家族(IPv6,IPv4 或 none)的地址
--user=用户 将 ftp 和 http 的用户名均设置为 <用户>
--password=密码 将 ftp 和 http 的密码均设置为 <密码>
--ask-password 提示输入密码
--no-iri 关闭 IRI 支持
--local-encoding=ENC 使用 ENC 作为 IRI (国际化资源标识符) 的本地编码
--remote-encoding=ENC 使用 ENC 作为默认远程编码
--unlink 覆盖前移除文件
目录:
-nd, --no-directories 不创建目录
-x, --force-directories 强制创建目录
-nH, --no-host-directories 不要创建主 (host) 目录
--protocol-directories 在目录中使用协议名称
-P, --directory-prefix=前缀 保存文件到 <前缀>/..
--cut-dirs=数字 忽略远程目录中 <数字> 个目录层。
HTTP 选项:
--http-user=用户 设置 http 用户名为 <用户>
--http-password=密码 设置 http 密码为 <密码>
--no-cache 不使用服务器缓存的数据。
--default-page=NAME 改变默认页 (通常是“index.html”)。
-E, --adjust-extension 以合适的扩展名保存 HTML/CSS 文档
--ignore-length 忽略头部的‘Content-Length’区域
--header=字符串 在头部插入 <字符串>
--max-redirect 每页所允许的最大重定向
--proxy-user=用户 使用 <用户> 作为代理用户名
--proxy-password=密码 使用 <密码> 作为代理密码
--referer=URL 在 HTTP 请求头包含‘Referer: URL’
--save-headers 将 HTTP 头保存至文件。
-U, --user-agent=代理 标识自己为 <代理> 而不是 Wget/VERSION。
--no-http-keep-alive 禁用 HTTP keep-alive (持久连接)。
--no-cookies 不使用 cookies。
--load-cookies=文件 会话开始前从 <文件> 中载入 cookies。
--save-cookies=文件 会话结束后保存 cookies 至 FILE。
--keep-session-cookies 载入并保存会话 (非永久) cookies。
--post-data=字符串 使用 POST 方式;把 <字串>作为数据发送。
--post-file=文件 使用 POST 方式;发送 <文件> 内容。
--method=HTTP方法 在请求中使用指定的 <HTTP 方法>。
--post-data=字符串 把 <字串> 作为数据发送,必须设置 --method
--post-file=文件 发送 <文件> 内容,必须设置 --method
--content-disposition 当选择本地文件名时允许 Content-Disposition
头部 (实验中)。
--content-on-error 在服务器错误时输出接收到的内容
--auth-no-challenge 不先等待服务器询问就发送基本 HTTP 验证信息。
HTTPS (SSL/TLS) 选项:
--secure-protocol=PR 选择安全协议,可以是 auto、SSLv2、
SSLv3、TLSv1、PFS 中的一个。
--https-only 只跟随安全的 HTTPS 链接
--no-check-certificate 不要验证服务器的证书。
--certificate=文件 客户端证书文件。
--certificate-type=类型 客户端证书类型,PEM 或 DER。
--private-key=文件 私钥文件。
--private-key-type=类型 私钥文件类型,PEM 或 DER。
--ca-certificate=文件 带有一组 CA 证书的文件。
--ca-directory=DIR 保存 CA 证书的哈希列表的目录。
--ca-certificate=文件 带有一组 CA 证书的文件。
--pinnedpubkey=FILE/HASHES Public key (PEM/DER) file, or any number
of base64 encoded sha256 hashes preceded by
'sha256//' and seperated by ';', to verify
peer against
HSTS 选项:
--no-hsts 禁用 HSTS
--hsts-file HSTS 数据库路径(将覆盖默认值)
FTP 选项:
--ftp-user=用户 设置 ftp 用户名为 <用户>。
--ftp-password=密码 设置 ftp 密码为 <密码>
--no-remove-listing 不要删除‘.listing’文件
--no-glob 不在 FTP 文件名中使用通配符展开
--no-passive-ftp 禁用“passive”传输模式
--preserve-permissions 保留远程文件的权限
--retr-symlinks 递归目录时,获取链接的文件 (而非目录)
FTPS 选项:
--ftps-implicit 使用隐式 FTPS(默认端口 990)
--ftps-resume-ssl 打开数据连接时继续控制连接中的 SSL/TLS 会话
--ftps-clear-data-connection 只加密控制信道;数据传输使用明文
--ftps-fallback-to-ftp 回落到 FTP,如果目标服务器不支持 FTPS
WARC 选项:
--warc-file=文件名 在一个 .warc.gz 文件里保持请求/响应数据
--warc-header=字符串 在头部插入 <字符串>
--warc-max-size=数字 将 WARC 的最大尺寸设置为 <数字>
--warc-cdx 写入 CDX 索引文件
--warc-dedup=文件名 不要记录列在此 CDX 文件内的记录
--no-warc-compression 不要 GZIP 压缩 WARC 文件
--no-warc-digests 不要计算 SHA1 摘要
--no-warc-keep-log 不要在 WARC 记录中存储日志文件
--warc-tempdir=目录 WARC 写入器的临时文件目录
递归下载:
-r, --recursive 指定递归下载
-l, --level=数字 最大递归深度 (inf 或 0 代表无限制,即全部下载)。
--delete-after 下载完成后删除本地文件
-k, --convert-links 让下载得到的 HTML 或 CSS 中的链接指向本地文件
--convert-file-only convert the file part of the URLs only (usually known as the basename)
--backups=N 写入文件 X 前,轮换移动最多 N 个备份文件
-K, --backup-converted 在转换文件 X 前先将它备份为 X.orig。
-m, --mirror -N -r -l inf --no-remove-listing 的缩写形式。
-p, --page-requisites 下载所有用于显示 HTML 页面的图片之类的元素。
--strict-comments 用严格方式 (SGML) 处理 HTML 注释。
递归接受/拒绝:
-A, --accept=列表 逗号分隔的可接受的扩展名列表
-R, --reject=列表 逗号分隔的要拒绝的扩展名列表
--accept-regex=REGEX 匹配接受的 URL 的正则表达式
--reject-regex=REGEX 匹配拒绝的 URL 的正则表达式
--regex-type=类型 正则类型 (posix|pcre)
-D, --domains=列表 逗号分隔的可接受的域名列表
--exclude-domains=列表 逗号分隔的要拒绝的域名列表
--follow-ftp 跟踪 HTML 文档中的 FTP 链接
--follow-tags=列表 逗号分隔的跟踪的 HTML 标识列表
--ignore-tags=列表 逗号分隔的忽略的 HTML 标识列表
-H, --span-hosts 递归时转向外部主机
-L, --relative 仅跟踪相对链接
-I, --include-directories=列表 允许目录的列表
--trust-server-names 使用重定向 URL 的最后一段作为本地文件名
-X, --exclude-directories=列表 排除目录的列表
-np, --no-parent 不追溯至父目录
wget 使用示例
基本的语法是:wget [参数列表] URL
1、使用 wget 下载单个文件
示例:wget http://cn.wordpress.org/wordpress-3.1-zh_CN.zip
2、-O 指定保存的文件名
wget http://www.centos.bz/download.php?id=1080 -O wordpress.zip
3、使用 wget --limit-rate=RATE 限速下载
wget 默认会占用全部可能的宽带下载。可以指定参数限速
wget --limit-rate=300k http://cn.wordpress.org/wordpress-3.1-zh_CN.zip
4、使用 wget -c 断点续传
当文件很大或者网络很慢的时候,往往一个文件还没有下载完,连接就已经被切断,此时就需要断点续传。wget 的断点续传是自动的,只需要使用 -c 参数。使用断点续传要求服务器支持断点续传。
例如: wget -c http://the.url.of/incomplete/file
-t 表示重试次数,例如:-t 100 重试100次,如果设成 -t 0 表示无穷次重试。
-T 参数表示超时等待时间,例如:-T 120,表示等待120秒连接不上就算超时。
5、使用 wget -b 后台下载
对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载。
wget -b http://cn.wordpress.org/wordpress-3.1-zh_CN.zip
Continuing in background, pid 1840.
Output will be written to `wget-log’.
你可以使用以下命令来察看下载进度
tail -f wget-log
6、使用代理服务器(proxy) 和 伪装代理(user-agent)名称下载
如果用户的网络需要经过代理服务器,那么可以让 wget 通过代理服务器进行文件的下载。
此时需要在当前用户的目录下创建一个 .wgetrc 文件。文件中可以设置代理服务器:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080分别表示http的代理服务器和ftp的代理服务器。
如果代理服务器需要密码,则使用这两个参数:
–proxy-user=USER 设置代理用户
–proxy-passwd=PASS 设置代理密码使用参数 –proxy=on/off 使用或者关闭代理。
有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过 --user-agent 参数伪装。
wget --user-agent=”Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16″ 下载链接wget 还有很多有用的功能,需要用户去挖掘。
7、使用 wget --spider 测试下载链接
wget --spider url
8、使用 wget --tries 增加重试次数
wget --tries=40 URL
9、使用 wget -i 下载多个文件 (批量下载)
如果有多个文件需要下载,那么可以生成一个文件,把每个文件的 URL 写一行。
例如,生成文件 download.txt,然后用命令:wget -i download.txt
这样就会把download.txt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页)
首先,保存一份下载链接文件
cat > filelist.txt
url1
url2
url3
url4
接着使用这个文件和参数-i下载wget -i filelist.txt
10、使用 wget --mirror 镜像网站
下面的例子是下载整个网站到本地。
wget –mirror -p –convert-links -P ./LOCAL URL
–miror:开户镜像下载
-p:下载所有为了html页面显示正常的文件
–convert-links:下载后,转换成本地的链接
-P ./LOCAL:保存所有文件和目录到本地指定目录
11、使用 wget --reject 过滤指定格式下载
可以指定让 wget 只下载一类文件,或者不下载什么文件。
例如:
wget -m –reject=gif http://target.web.site/subdirectory
表示下载 http://target.web.site/subdirectory,但是忽略gif文件。–accept=LIST 可以接受的文件类型,
–reject=LIST 拒绝接受的文件类型。
你想下载一个网站,但你不希望下载图片,你可以使用以下命令。wget –reject=gif url
12、使用 wget -o 把下载信息存入日志文件
你不希望下载信息直接显示在终端而是在一个日志文件,可以使用以下命令:
wget -o download.log URL
13、使用 wget -Q 限制总下载文件大小
当你想要下载的文件超过5M而退出下载,你可以使用以下命令:
wget -Q5m -i filelist.txt
注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。
14、使用 wget -r -A 下载指定格式文件
可以在以下情况使用该功能
下载一个网站的所有图片
下载一个网站的所有视频
下载一个网站的所有PDF文件
wget -r -A.pdf url
15、下载整个 http 或者 wget FTP 下载
wget http://place.your.url/here
这个命令可以将 http://place.your.url/here 首页下载下来。
使用 -x 会强制建立服务器上一模一样的目录,
如果使用 -nd 参数,那么服务器上下载的所有内容都会加到本地当前目录。wget -r http://place.your.url/here
这个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。
这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址同 样会被下载,
因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!
基于这个原因,这个参数不常用。
可以用 -l number 参数来指定下载的层次。例如只下载两层,那么使用-l 2。要是您想制作镜像站点,那么可以使用 -m 参数,
例如:wget -m http://place.your.url/here
这时 wget 会自动判断合适的参数来制作镜像站点。
此时,wget会登录到服务器上,读入robots.txt 并按 robots.txt的规定来执行。
使用 wget 匿名ftp 下载
wget ftp -url使用 wget 用户名 和 密码认证的 ftp 下载
wget –ftp-user=USERNAME –ftp-password=PASSWORD url
16、密码和认证
wget 可以处理利用 用户名/密码 方式限制访问的网站,可以利用两个参数:
--http-user=用户 设置 http 用户名为 <用户>
--http-password=密码 设置 http 密码为 <密码>
对于需要证书做认证的网站,就只能利用其他下载工具了,例如 curl
3、curl 命令
linux 的 curl 是 一个强大的 网络传输工具。
linux 的 curl 是通过 url 语法 在命令行下上传或下载文件的工具软件,它支持 http、https、ftp,、ftps、telnet 等多种协议,常被用来抓取网页 和 监控Web服务器状态。
curl 命令是一个功能强大的网络工具,它能够通过 http、ftp 等方式下载文件,也能够上传文件。其实 curl 远不止前面所说的那些功能,大家可以通过 man curl 阅读手册页获取更多的信息。类似的工具还有 wget。
curl 命令使用了 libcurl 库来实现,libcurl 库常用在 C程序 中用来处理 HTTP 请求,curlpp 是 libcurl 的一个 C++ 封装,这几个东西可以用在抓取网页、网络监控等方面的开发,而 curl 命令可以帮助来解决开发过程中遇到的问题。
curl 常用参数
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 上传文件的路径
--url URL 要使用的URL
-B, --use-ascii 使用 ASCII/text 传输
-u, --user USER[:PASSWORD] 服务器的用户名和密码
--tlsuser USER TLS 用户名
--tlspassword STRING TLS 密码
--tlsauthtype STRING TLS 认证类型 (default SRP)
--unix-socket FILE 通过UNIX域套接字连接
-A, --user-agent STRING 设置发送给服务器的user-agent (H)
-v, --verbose 显示交互过程中的相信信息
-V, --version 显示版本信息
-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
代理协议的区别
SOCKS4 和 SOCKS4a 已经被 SOCKS5 取代。不应再使用。
Windows IE 的代理貌似只支持到 SOCKS4a,不支持 SOCKS5。
SOCKS5 和 SOCKS5h 的区别仅用于 cURL。在 cURL 中,SOCKS5 会使用本地DNS,SOCKS5h 会使用代理提供的远程DNS。
在其它软件中,SOCKS5h 基本不起作用,使用 SOCKS5 即可。一旦设置了代理,多数时候会采用远程DNS。
curl 设置
使用 SOCKS4 代理:curl --proxy socks4://<host>:<port> <url>
使用 SOCKS4a 代理:curl --proxy socks4a://<host>:<port> <url>
使用 SOCKS5(本地DNS)代理:curl --proxy socks5://<host>:<port> <url>
使用 SOCKS5(远程DNS)代理,注意协议头是( socks5h:// ) :curl --proxy socks5h://<host>:<port> <url>
假设您有一个socks5代理运行在localhost:8001上。
crul >= 7.21.7 命令:curl -x socks5h://localhost:8001 http://www.google.com/
crul >= 7.18.0 命令:curl --socks5-hostname localhost:8001 http://www.google.com/
许多工具在内部使用 libcurl,或者在安装程序脚本中使用curl命令。如果很难修改命令行本身,可以使用环境变量设置代理。
env ALL_PROXY=socks5h://localhost:8001 PROGRAM [OPTION]...
如果你想覆盖系统代理设置,你可能还需要设置两个额外的变量:
env http_proxy=socks5h://localhost:8001 HTTPS_PROXY=socks5h://localhost:8001 ALL_PROXY=socks5h://localhost:8001 PROGRAM [OPTION]...
注意:http_proxy是小写的,其他两个是大写的。
使用示例:
1、基本用法
示例:curl http://www.linux.com
执行后,www.linux.com 的html 就会显示在屏幕上了
Ps:由于安装 linux 的时候很多时候是没有安装桌面的,也意味着没有浏览器,因此这个方法也经常用于测试一台服务器是否可以到达一个网站
2、保存访问的网页
使用 linux 的重定向功能保存:curl http://www.linux.com >> linux.html
可以使用curl的内置option:-o(小写)保存网页:curl -o linux.html http://www.linux.com
可以使用curl的内置option:-O(大写)保存网页中的文件:curl -O http://www.linux.com/hello.sh
3、测试网页返回值
测试网站是否正常:curl -o /dev/null -s -w %{http_code} www.linux.com
4、指定proxy服务器以及其端口
curl 通过 -x 来支持设置代理:curl -x 192.168.100.100:1080 http://www.linux.com
5、cookie
保存http的response里面的cookie信息。内置 option:-c(小写)
示例:curl -c cookiec.txt http://www.linux.com
执行后 cookie信息就被存到了cookiec.txt里面了
保存http的response里面的header信息。内置option: -D
示例:curl -D cookied.txt http://www.linux.com
执行后cookie信息就被存到了cookied.txt里面了
注意:-c(小写)产生的cookie和-D里面的cookie是不一样的。
使用 cookie:curl -b cookiec.txt http://www.linux.com
6、模仿浏览器
伪造 ua:# curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com
7、伪造 referer(盗链)
很多服务器会检查http访问的referer从而来控制访问。比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的referer地址不是首页的地址,就断定那是个盗连了
curl中内置option:-e可以让我们设定referer示例:curl -e "www.linux.com" http://mail.linux.com
这样就会让服务器其以为你是从www.linux.com点击某个链接过来的
8、下载文件
使用内置option:-o(小写):curl -o dodo1.jpg http:www.linux.com/dodo1.JPG
使用内置option:-O(大写):curl -O http://www.linux.com/dodo1.JPG
这样就会以服务器上的名称保存文件到本地
循环下载。有时候下载图片可以能是前面的部分名称是一样的,就最后的名字不一样
示例:curl -O http://www.linux.com/dodo[1-5].JPG
这样就会把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下来
下载重命名
示例:curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JP
由于下载的hello与bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下载的会把第一次下载的覆盖,这样就需要对文件进行重命名。
示例:curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG
这样在hello/dodo1.JPG的文件下载下来就会变成hello_dodo1.JPG,其他文件依此类推,从而有效的避免了文件被覆盖
分块下载
有时候下载的东西会比较大,这个时候我们可以分段下载。使用内置option:-r
# curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG
# curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG
# curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG
# cat dodo1_part* > dodo1.JPG这样就可以查看dodo1.JPG的内容了
通过ftp下载文件
curl 可以通过 ftp下载文件,curl 提供两种从 ftp 中下载的语法
# curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG
# curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG
显示 进度条
显示进度条,示例:curl -# -O http://www.linux.com/dodo1.JPG
不现实 进度条 示例:curl -s -O http://www.linux.com/dodo1.JPG
9、断点续传
如果在下载 dodo1.JPG 的过程中突然掉线了,可以使用以下的方式续传
示例:curl -C -O http://www.linux.com/dodo1.JPG
10、上传文件
curl 不仅仅可以下载文件,还可以上传文件。通过内置 option:-T 来实现
示例:curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/
这样就向ftp服务器上传了文件dodo1.JPG
4、x-cmd 提供的 httpx
httpx
是由 github.com/encode 用 python 开发的现代化 HTTP 客户端和库。它功能丰富且兼容 requests,支持 HTTP/1.1 和 HTTP/2 协议,提供同步和异步 API,适用于各种 HTTP 请求场景。
x-cmd 提供的 httpx
为 httpx 项目的 httpx[cli],即 httpx 的命令行客户端。它能在命令行中发送 HTTP 请求,语法类似于 curl
,但具备 Python 风格和强大的异步支持,非常适合开发者用于在调试 API 或执行 HTTP 操作时进行快速测试。
5、httpie
官网:https://httpie.io/
文档:https://httpie.io/docs/desktop/getting-started
github:https://github.com/httpie
Web 版:https://httpie.io/app
桌面版:https://httpie.io/app
命令行:https://github.com/httpie/cli
HTTPie 支持 桌面程序版、web版、命令行版。HTTPie 命令行版本是一个现代命令行 http 客户端,是curl和wget命令的最佳替代品。它能通过命令行界面与 Web 服务进行交互。它提供一个简单的 http 命令,允许使用简单而自然的语法发送任意的 HTTP 请求,并会显示彩色的输出。HTTPie 能用于测试、调试及与 HTTP 服务器交互。
HTTPie 也是一个跨平台的API测试客户端。可以轻松的测试 REST、GraphQL 和 HTTP api。httpie 也是 Postman 的绝佳替代品。
安装:pip install httpie
httpie --help HTTPie 本身的管理接口
http / https 发送 http 请求的命令,这两个命令用于管理 httpie 插件及其相关配置。
HTTPie 官方文档中文翻译版:https://keelii.com/2018/09/03/HTTPie
6、linux 网络测速
下载 测速
使用 wget 命令下载测速。
这里以下载 lnmp 为例,示例:wget http://soft.vpser.net/lnmp/lnmp1.7-full.tar.gz
fast
fast 是 Netflix 提供的一项服务,它不仅可以通过命令行来使用,而且可以直接在 Web 端使用:fast.com。
安装:npm install --global fast-cli
不管是网页端还是命令行,它都提供了最基本的网络下载测速。
执行命令:fast 只返回网络下载速度
执行命令:fast -u 返回 上传、下载 速度
安装 Speedtest 进行测试
Speedtest 是一个用 Python 编写的轻量级 Linux 命令行工具,可基于 Speedtest.net 的基础架构来测量linux服务器网络的上/下行速率!
speedtest 是一个更加知名的工具。它是用 Python 写成的,可以使用 apt 或 pip 命令来安装。你可以在命令行下使用,也可以直接将其导入到你的 Python 项目。
安装方式:sudo apt install speedtest-cli
或者:sudo pip3 install speedtest-cli
使用的时候,可以直接运行 speedtest 命令即可: