目录
在 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中使用代理服务器的各种方法,大家可以根据实际需要选择最合适方法。
文章浏览阅读331次。第一部分:准备工作1 安装虚拟机2 安装centos73 安装JDK以上三步是准备工作,至此已经完成一台已安装JDK的主机第二部分:准备3台虚拟机以下所有工作最好都在root权限下操作1 克隆上面已经有一台虚拟机了,现在对master进行克隆,克隆出另外2台子机;1.1 进行克隆21.2 下一步1.3 下一步1.4 下一步1.5 根据子机需要,命名和安装路径1.6 ..._创建一个hadoop项目
文章浏览阅读1.7k次。心脏滴血漏洞HeartBleed CVE-2014-0160 是由heartbeat功能引入的,本文从深入码层面的分析该漏洞产生的原因_heartbleed代码分析
文章浏览阅读1.4k次。前言ofd是国家文档标准,其对标的文档格式是pdf。ofd文档是容器格式文件,ofd其实就是压缩包。将ofd文件后缀改为.zip,解压后可看到文件包含的内容。ofd文件分析工具下载:点我下载。ofd文件解压后,可以看到如下内容: 对于xml文件,可以用文本工具查看。但是对于印章文件(Seal.esl)、签名文件(SignedValue.dat)就无法查看其内容了。本人开发一款ofd内容查看器,..._signedvalue.dat
文章浏览阅读1.8w次,点赞29次,收藏313次。整体系统设计本设计主要是对ADC和DAC的使用,主要实现功能流程为:首先通过串口向FPGA发送控制信号,控制DAC芯片tlv5618进行DA装换,转换的数据存在ROM中,转换开始时读取ROM中数据进行读取转换。其次用按键控制adc128s052进行模数转换100次,模数转换数据存储到FIFO中,再从FIFO中读取数据通过串口输出显示在pc上。其整体系统框图如下:图1:FPGA数据采集系统框图从图中可以看出,该系统主要包括9个模块:串口接收模块、按键消抖模块、按键控制模块、ROM模块、D.._基于fpga的信息采集
文章浏览阅读2.5w次。1.背景错误信息:-- [http-nio-9904-exec-5] o.s.c.n.z.filters.post.SendErrorFilter : Error during filteringcom.netflix.zuul.exception.ZuulException: Forwarding error at org.springframework.cloud..._com.netflix.zuul.exception.zuulexception
文章浏览阅读358次。1.介绍图的相关概念 图是由顶点的有穷非空集和一个描述顶点之间关系-边(或者弧)的集合组成。通常,图中的数据元素被称为顶点,顶点间的关系用边表示,图通常用字母G表示,图的顶点通常用字母V表示,所以图可以定义为: G=(V,E)其中,V(G)是图中顶点的有穷非空集合,E(G)是V(G)中顶点的边的有穷集合1.1 无向图:图中任意两个顶点构成的边是没有方向的1.2 有向图:图中..._给定一个邻接矩阵未必能够造出一个图
文章浏览阅读321次。(十二)、WDS服务器安装通过前面的测试我们会发现,每次安装的时候需要加域光盘映像,这是一个比较麻烦的事情,试想一个上万个的公司,你天天带着一个光盘与光驱去给别人装系统,这将是一个多么痛苦的事情啊,有什么方法可以解决这个问题了?答案是肯定的,下面我们就来简单说一下。WDS服务器,它是Windows自带的一个免费的基于系统本身角色的一个功能,它主要提供一种简单、安全的通过网络快速、远程将Window..._doc server2012上通过wds+mdt无人值守部署win11系统.doc
文章浏览阅读219次。python–xlrd/xlwt/xlutilsxlrd只能读取,不能改,支持 xlsx和xls 格式xlwt只能改,不能读xlwt只能保存为.xls格式xlutils能将xlrd.Book转为xlwt.Workbook,从而得以在现有xls的基础上修改数据,并创建一个新的xls,实现修改xlrd打开文件import xlrdexcel=xlrd.open_workbook('E:/test.xlsx') 返回值为xlrd.book.Book对象,不能修改获取sheett_xlutils模块可以读xlsx吗
文章浏览阅读8.2w次,点赞267次,收藏656次。运行Selenium出现'WebDriver' object has no attribute 'find_element_by_id'或AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'等定位元素代码错误,是因为selenium更新到了新的版本,以前的一些语法经过改动。..............._unresolved attribute reference 'find_element_by_id' for class 'webdriver
文章浏览阅读198次。一:模态窗口//父页面JSwindow.showModalDialog(ifrmehref, window, 'dialogWidth:550px;dialogHeight:150px;help:no;resizable:no;status:no');//子页面获取父页面DOM对象//window.showModalDialog的DOM对象var v=parentWin..._jquery获取父window下的dom对象
文章浏览阅读1.7w次,点赞15次,收藏129次。算法(algorithm)是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。 简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵 魂。二、算法的特征1.可行性 算法中执行的任何计算步骤都可以分解为基本可执行的操作步,即每个计算步都可以在有限时间里完成(也称之为有效性) 算法的每一步都要有确切的意义,不能有二义性。例如“增加x的值”,并没有说增加多少,计算机就无法执行明确的运算。 _算法
文章浏览阅读1.5k次,点赞18次,收藏26次。网络安全的标准和规范是网络安全领域的重要组成部分。它们为网络安全提供了技术依据,规定了网络安全的技术要求和操作方式,帮助我们构建安全的网络环境。下面,我们将详细介绍一些主要的网络安全标准和规范,以及它们在实际操作中的应用。_网络安全标准规范