目录
在 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中使用代理服务器的各种方法,大家可以根据实际需要选择最合适方法。
文章浏览阅读2.5w次,点赞6次,收藏50次。官方解释是,docker 容器是机器上的沙盒进程,它与主机上的所有其他进程隔离。所以容器只是操作系统中被隔离开来的一个进程,所谓的容器化,其实也只是对操作系统进行欺骗的一种语法糖。_docker菜鸟教程
文章浏览阅读5.7k次,点赞3次,收藏14次。该如何避免的,今天小编给大家推荐两个下载Windows系统官方软件的资源网站,可以杜绝软件捆绑等行为。该站提供了丰富的Windows官方技术资源,比较重要的有MSDN技术资源文档库、官方工具和资源、应用程序、开发人员工具(Visual Studio 、SQLServer等等)、系统镜像、设计人员工具等。总的来说,这两个都是非常优秀的Windows系统镜像资源站,提供了丰富的Windows系统镜像资源,并且保证了资源的纯净和安全性,有需要的朋友可以去了解一下。这个非常实用的资源网站的创建者是国内的一个网友。_msdn我告诉你
文章浏览阅读1.2k次。vue2封装对话框el-dialog组件_
文章浏览阅读4.7k次,点赞5次,收藏6次。MFC 文本框换行 标签: it mfc 文本框1.将Multiline属性设置为True2.换行是使用"\r\n" (宽字符串为L"\r\n")3.如果需要编辑并且按Enter键换行,还要将 Want Return 设置为 True4.如果需要垂直滚动条的话将Vertical Scroll属性设置为True,需要水平滚动条的话将Horizontal Scroll属性设_c++ mfc同一框内输入二行怎么换行
文章浏览阅读832次。检查Linux是否是否开启所需端口,默认为6379,若未打开,将其开启:以root用户执行iptables -I INPUT -p tcp --dport 6379 -j ACCEPT如果还是未能解决,修改redis.conf,修改主机地址:bind 192.168.85.**;然后使用该配置文件,重新启动Redis服务./redis-server redis.conf..._redis-server doesn't support auth command or ismisconfigured. try
文章浏览阅读4.9k次。济大数电实验报告_数据选择器及其应用
文章浏览阅读236次。1研究内容消费在生产中占据十分重要的地位,是生产的最终目的和动力,是保持省内经济稳定快速发展的核心要素。预测河南省社会消费品零售总额,是进行宏观经济调控和消费体制改变创新的基础,是河南省内人民对美好的全面和谐社会的追求的要求,保持河南省经济稳定和可持续发展具有重要意义。本文建立灰色预测模型,利用MATLAB软件,预测出2019年~2023年河南省社会消费品零售总额预测值分别为21881...._灰色预测模型用什么软件
文章浏览阅读1.2k次。12.4-在Qt中使用Log4Qt输出Log文件,看这一篇就足够了一、为啥要使用第三方Log库,而不用平台自带的Log库二、Log4j系列库的功能介绍与基本概念三、Log4Qt库的基本介绍四、将Log4qt组装成为一个单独模块五、使用配置文件的方式配置Log4Qt六、使用代码的方式配置Log4Qt七、在Qt工程中引入Log4Qt库模块的方法八、获取示例中的源代码一、为啥要使用第三方Log库,而不用平台自带的Log库首先要说明的是,在平时开发和调试中开发平台自带的“打印输出”已经足够了。但_log4qt
文章浏览阅读786次。全局观思维模型,一个教我们由点到线,由线到面,再由面到体,不断的放大格局去思考问题的思维模型。_计算机中对于全局观的
文章浏览阅读330次。一、CountDownLatch介绍CountDownLatch采用减法计算;是一个同步辅助工具类和CyclicBarrier类功能类似,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。二、CountDownLatch俩种应用场景: 场景一:所有线程在等待开始信号(startSignal.await()),主流程发出开始信号通知,既执行startSignal.countDown()方法后;所有线程才开始执行;每个线程执行完发出做完信号,既执行do..._countdownluach于cyclicbarrier的用法
文章浏览阅读508次。Prometheus 算是一个全能型选手,原生支持容器监控,当然监控传统应用也不是吃干饭的,所以就是容器和非容器他都支持,所有的监控系统都具备这个流程,_-自动化监控系统prometheus&grafana实战
文章浏览阅读4.7k次。输入关键字,可以通过键盘的搜索按钮完成搜索功能。_react search