目录
在 Linux 中 curl 是一个利用 URL 规则在命令行下工作的文件传输工具,可以说是一款很强大的 http 命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称 url 为下载工具。
作为一款强力工具,curl 支持包括 HTTP、HTTPS、FTP 等众多协议,还支持 GET、POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征,还可以做网页处理流程和数据检索自动化。
在进行 web 后台程序开发测试过程中,常常会需要发送 url 进行测试,使用 curl 可以方便地模拟出符合需求的 url 命令。
curl(cURL)是一个用于传输数据的命令行工具,其诞生于20多年前,最早版本是在1998年。
curl支持以多种方式检索和发送数据,并输出到标准输出,可以无缝衔接标准unix管道使用。在绝大多数的*nix操作系统上都默认安装。curl支持各种协议,包括 HTTP/HTTPS、FTP和SCP。
url [option] [url]
参数 | 描述 |
---|---|
option | curl 命令使用的选项。 |
url | 请求的 URL。 |
使用 curl 命令,加上参数 option 给指定的 url 发送请求。
参数 | 描述 |
---|---|
-A/–user-agent | 设置用户代理发送给服务器。 |
-b/–cookie <name=string/file> | cookie 字符串或文件读取位置。 |
-c/–cookie-jar | 操作结束后把 cookie 写入到这个文件中 |
-C/–continue-at | 断点续转 |
-D/–dump-header | 把 header 信息写入到该文件中 |
-e/–referer | 来源网址 |
-f/–fail | 连接失败时不显示 http 错误 |
-o/–output | 把输出写到该文件中 |
-O/–remote-name | 把输出写到该文件中,保留远程文件的文件名 |
-r/–range | 检索来自 HTTP/1.1 或 FTP 服务器字节范围 |
-s/–silent | 静音模式。不输出任何东西 |
-T/–upload-file | 上传文件 |
-u/–user <user[:password]> | 设置服务器的用户和密码 |
-w/–write-out [format] | 什么输出完成后 |
-x/–proxy <host[:port]> | 在给定的端口上使用HTTP代理 |
-#/–progress-bar | 进度条显示当前的传送状态 |
我们在使用 Linux 的 curl 命令,访问网站时,可以通过 A 参数来指定我们访问该网站使用的指定的浏览器或者指定的浏览器的指定版本。
url -A info url
参数 | 描述 |
---|---|
info | 模仿的浏览器信息。 |
url | 请求的 URL。 |
我们使用 A 参数设置浏览器信息,来模拟浏览器访问网站。
使用 curl 命令,可以指定浏览器信息,来访问网站,具体命令如下:
url -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.haicoder.net
我们使用了 A 参数模仿了使用 IE8.0 去访问了网站。
我们在使用 Linux 的 curl 命令时,可以使用 e 参数,来伪造 refer 信息,以防止某些网站的防盗链功能屏蔽我们的访问。
很多服务器会检查 http 访问的 referer 从而来控制访问。比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的 referer 地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的 referer 地址不是首页的地址,就断定那是个盗链了。
url -e referUrl url
参数 | 描述 |
---|---|
referUrl | 模仿的 url 信息。 |
url | 请求的 URL。 |
我们使用 e 参数模仿请求的 url。
使用 curl 命令,可以伪造访问的 url 信息,来访问网站,具体命令如下:
url -e "www.haicoder.net" http://www.haicoder.net/uploads/pic/server/golang/golang-basic-syntax/01%20go%20helloworld.png
运行后,终端输出如下:
语法
curl -o fileName url
参数
参数 | 描述 |
---|---|
fileName | 保存的文件名。 |
url | 请求的 URL。 |
说明
我们使用 o 参数将 url 的信息保存到本地 fileName 文件中。
语法
curl -O url
参数 | 描述 |
---|---|
url | 请求的 URL。 |
我们使用 O 参数将 url 的信息保存到本地文件中,文件名与服务器上的文件同名。
我们使用 Linux 的 curl 命令,在下载文件时,还可以显示下载的进度条信息。
语法
curl -# -O url
参数
参数 | 描述 |
---|---|
url | 要下载的 url。 |
我们在使用 Linux 的 curl 命令,在下载文件时,还可以支持断点续传功能,即,我们下载文件过程中断线了,可以继续下载。
语法
url -C offset -O url
参数
参数 | 描述 |
---|---|
offset | 开始下载位置。 |
url | 要下载的 url。 |
使用 curl 命令,下载文件时,还可以支持断点续传,具体命令如下:
url -C 0 -O http://www.haicoder.net/uploads/pic/server/golang/golang-basic-syntax/01%20go%20helloworld.png
我们使用 Linux 的 curl 命令,不仅仅可以支持下载文件,还可以支持上传文件,我们通过参数 T 实现上传文件功能。
语法
url -T uploadFile -u username:password uploadUrl
参数
参数 | 描述 |
---|---|
uploadFile | 需要上传的文件。 |
username | 用户名。 |
password | 密码。 |
uploadUrl | 上传的 Url。 |
我们使用 Linux 的 curl 命令,不仅仅可以支持下载文件,还可以支持上传文件,我们通过参数 T 实现上传文件功能。
我们在使用 Linux 的 curl 命令时,可以使用 f 参数,显示获取的错误信息。
语法
url -f url
参数
参数 | 描述 |
---|---|
url | 请求的 url。 |
使用 curl 命令,可以获取错误信息,具体命令如下:
url -f www.haicoder.net
我们在使用 Linux 的 curl 命令时,可以实现 GET请求的功能,即可以模拟 HTTP 的 GET 请求。
语法
url "url?param1=val1¶m2=val2"
参数
参数 | 描述 |
---|---|
url | 请求的 URL。 |
param1 | 请求参数 1。 |
val1 | 请求参数 1 的值。 |
param2 | 请求参数 2。 |
val2 | 请求参数 2 的值。 |
说明
在发送 GET 请求时,请求参数放在 url 后面,因为有特殊字符 &,所以我们需要使用双引号进行包裹,或者,我们直接使用转义字符也可以,即 curl "url?param1=val1\¶m2=val2"
我们在使用 Linux 的 curl 命令时,可以实现 GET请求的功能,即可以模拟 HTTP 的 GET 请求。
我们在使用 Linux 的 curl 命令时,可以实现 POST 请求的功能,即可以模拟 HTTP 的 POST 请求。
语法
curl [-H] [HEAD] -X POST -d '{"key1": "val1", "key2":val2}' url
参数
参数 | 描述 |
---|---|
HEAD | 请求头信息。 |
key1 | 请求参数 1。 |
val1 | 请求参数 1 的值。 |
key2 | 请求参数 2。 |
val2 | 请求参数 2 的值。 |
url | 请求的 URL。 |
说明
在发送 POST 请求时,我们可以使用 H 参数,指定发送的请求头信息,使用 X 参数,说明我们发送的是 POST 请求。
使用 d 参数,设置我们请求的参数信息。
语法
url -H "Content-Type: application/json" -X POST -d '{"key1": "val1", "key2":val2}' url
说明
我们使用了 H 参数,设置了请求的参数是 Json 类型。
我们在使用 Linux 的 curl 命令时,可以实现 POST 请求的功能,即可以模拟 HTTP 的 POST 请求。
我们在使用 Linux 的 curl 命令,访问网站时,还可以使用 x 参数,来指定访问网站时使用的具体代理地址和端口。
语法
url -x proxyAddr:proxyPort url
参数
参数 | 描述 |
---|---|
proxyAddr | 代理 ip。 |
proxyPort | 代理端口。 |
url | 请求的 URL。 |
说明
我们使用 x 参数设置代理信息。
使用 curl 命令,访问网站时,可以设置代理信息,具体命令如下:
url -x 220.181.38.150 www.haicoder.net
Web代理服务器充当客户端和目标服务器之间的中介。客户端首先访问代理,然后代理执行它并将结果返回给客户端。
有些Web站点是有限制的,我们无法直接通过当前IP直接访问目标站点;还有一些站点对访问请求是有一定限制,而我们在请求数据时候为了请求速度也需要突破IP限制。通过使用代理服务,我们就可以突破上述限制。
为演示需要,本文中示例中使用的代理将设置为本地机器上,使用端口5000。默认情况下,代理语句中唯一需要的部分是主机,默认端口80。我们将通过HTTP将数据传输到它,我们将明确指定完整性。为了方便,我们请求服务为httpbin。 Httpbin是一个开源的标准http服务显示,在请求/ip接口时候可以查看请求IP地址。
使用代理的第一个也是最简单的选项是使用命令行参数。Curl代理参数为-x(或者--proxy)。基本格式为:
-x, --proxy [protocol://]host[:port]
因此,要使用代理访问,可以使用:
curl -x 220.181.38.150 www.haicoder.net
其中,代理服务器的协议头,默认为http可以省略掉:
curl -x 127.0.0.1:5000 httpbin/ip
身份验证
此外,如果HTTP代理服务器也需要身份验证,可以使用 -U标志来指定它。
curl -U user:password --proxy 127.0.0.1:5000 httpbin/ip
某些代理服务器可能需要不同的身份验证方案。可以通过--proxy-anyauth指定curl以确定身份验证方案
curl -U user:password --proxy 127.0.0.1:5000 httpbin/ip --proxy-anyauth
如果认证密码中包含特殊字符,需要对其添加加上双引号("")。
curl -U "user:p@assword" --proxy 127.0.0.1:5000 httpbin/ip
上面命令中直接用密码容易被泄露并且会被记录在history日志中,在命令行中通过只提供用户名,然后可以交互式的,根据curl提示输入密码。
curl -U user --proxy 127.0.0.1:5000 httpbin/ip
> Enter proxy password for user 'user':
可以使用环境变量配置实现curl使用代理服务器。curl允许通过设置变量为它支持的每个协议使用环境变量[scheme]_proxy。如果设置了这些,那么当使用对应协议时,curl将默认引入。对http和https协议:
export http_proxy="127.0.0.1:5000"
export https_proxy="127.0.0.1:5000"
同样可以添加认证参数:
export http_proxy="http://username:[email protected]:5000"
export https_proxy="http://username:[email protected]:5000"
然后所有,curl http和https请求就会自动使用代理。
与以这种方式设置的所有环境变量一样,这些只是临时变量,shell会话结束或重新启动系统时删除。但是,为了使其在所有会话中可用,可以将其附加到profile文件中,或者对于个人可以在.bashrc 或 .zshrc文件添加,实现持久化的代理设置。
配置代理的另一种更持久的方法是shell别名,如果总是需要以这种方式定期连接,这很有用。通过别名可以cur将调用替换为使用代理的版本,这其实和上面的方法二同理。
alias curl="curl -x 127.0.0.1:5000"
其实curl也支持个性化的配置参数配置,配置文件默认情况下在个人目录 ~/.curlrc(Windows上为 _curlrc),也可以指定其他文件路径。
在.curlrc配置文件中添加代理支持的方法为:
proxy = "http://127.0.0.1:5000"
最后举个更复杂的,我们使用unix管道将结合grep正则提取站点标题。
curl curl –silent baidu |grep -Eo '<title>(.*)</title>'
--silent参数可以去掉curl输出进度信息,对响应的内容用grep正则表达式中捕获标题。
在本文中,我们介绍curl中使用代理服务器的各种方法,大家可以根据实际需要选择最合适方法。
文章浏览阅读700次。关于在readthedocs上部署mkdocs时遇到的问题_attributeerror: module 'jinja2' has no attribute 'contextfunction
文章浏览阅读4.3w次,点赞8次,收藏57次。tensorflow-gpu v1.9.0 |cuda9.0 | cuDNN7.1.4可行 | 备注:7.0.4/ 7.0.5/ 7.1.2不明确tensorflow-gpu v1.8.0 | cuda9.0 | cuDNN 不明确 | 备注:7.0.4/ 7.0.5/ 7.1.2/ 7.1.4tensorflow-gpu v1.7.0 | cuda9.0 | cuDNN 不..._tensorflow2对应的cuda
文章浏览阅读332次。题目不难,一个完全背包而已。只是需要注意,我用double直接读入莫名WA,看了别人的题解才发现要+上一个0.005,可是我依然无法理解为什么是这样。#include#include#includeusing namespace std;;const int maxm=30000;long long arr[maxm+10]{1},value[11]={5,10,20,50,100_uva 147
文章浏览阅读135次。SpringMVC的异常处理机制1.异常处理的思路 系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常而获取异常信息,后者主要通过规范代码开发、测试等手段减少运行时异常的发生。 系统的Dao、Service、Controller出现都通过throws Exception向上抛出,最后由SpringMVC前端控制器交由异常处理机制进行异常处理,如下图:2.异常处理两种方式(1)使用SpringMVC提供的简单异常处理器SimpleMappingExcep_ssm框架抛出异常
文章浏览阅读1.1k次。命令是一种行为设计模式它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。假如你正在开发一款新的文字编辑器,当前的任务是创建一个包含多个按钮的工具栏,并让每个按钮对应编译器的不同操作。你创建了一个「Button」类。它不仅用于生成工具栏上的按钮,还可用于生成各种对话框的通用按钮。尽管所有按钮看上去都很相似,但它们可以完成不同的操作(打开、保存、打印和应用等)。你会在哪里放置这些按钮的点击处理代码呢?最。_command命令是干什么的
文章浏览阅读2.2k次,点赞2次,收藏2次。前端移动端Swiper插件(使用方法)_移动端分页插件
文章浏览阅读2k次。STM32F103VET6+keil5+STM32CubeMX 点亮LED灯_stm32f103vet stm32cube
文章浏览阅读5.2k次。Apk Installer介绍Apk Installer(原名:WSAInstallTool,自1.2.3.0版本后更名)是一款Windows下自动关联APK文件且双击APK安装到任意安卓设备上的工具。该软件可以显示Apk自身的图标,详细的权限列表等。支持Windows 11 安卓子系统,支持Windows 7、Windows 10 、Windows 11安装软件至任意安卓设备上。如软件无法运行,请安装.Net Framework 4.5.2。该软件主要服务于Windows 11 的Android子系_apk installer
文章浏览阅读4.5w次,点赞20次,收藏18次。MicroStation是一款非常不错的二维和三维设计软件,由奔特力(Bentley)工程软件系统有限公司开发的一款软件。在CAD设计上该软件是和AutoCAD是齐名的软件,其专用的文件格式是DGN,当然该软件还兼容AutoCAD的DWG/DXF等格式,该软件的应用已经非常广泛,在建筑、土木工程、交通运输、加工工厂、离散制造业、政府部门、公用事业和电讯网络等领域都有使用到该软件。小编今天带来的是..._microstation v8i 下载
文章浏览阅读1.1w次,点赞3次,收藏22次。转:http://www.elecfans.com/d/574955.html对数转换有双对数坐标转换和单轴对数坐标转换两种。用loglog函数可以实现双对数坐标转换,用semilogx和semilogy函数可以实现单轴对数坐标转换。loglog(Y) 表示 x、y坐标都是对数坐标系semilogx(Y) 表示 x坐标轴是对数坐标系semilogy(…)..._semilogx(t,y)是什么意思
文章浏览阅读10w+次,点赞197次,收藏780次。拥有本篇文章,意味着你拥有一本完善的书籍,本篇文章整理了数据仓库领域,几乎所有的知识点。_数据仓库设计:现代原理与方法pdf
文章浏览阅读1.9w次,点赞45次,收藏262次。一、math库概述math库是Python提供内置数学类函数库math库不支持复数类型math库一共提供了4个数学常数和44个函数。 44个函数分为4类,包括:16个数值表示函数、8个幂对数函数、16个三角对数函数和四个高等特殊函数二、math库解析首先使用保留字import引用该库1) 4个数学常数 &amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;gt;&amp;amp;am_python里math库所有