curl命令详解及设置代理服务器_curl 代理-程序员宅基地

技术标签: 运维  linux  服务器  

目录

概述

Linux Curl命令详解

Curl命令参数

Curl模仿浏览器命令

Curl模仿浏览器详解

模仿浏览器

Curl伪造refer命令

Curl伪造refer详解

伪造refer

Curl下载文件或网页详解

Curl下载进度条命令

Curl下载进度条详解

Curl断点续传命令

Curl断点续传详解

断点续传

Curl上传文件命令

Curl上传文件详解

Curl上传文件命令总结

Curl获取错误命令

Curl获取错误详解

获取错误

Curl GET请求命令

Curl GET请求详解

Curl GET请求命令总结

Curl POST请求命令

Curl POST请求详解

Curl POST请求详解

Curl POST请求命令总结

Curl设置代理proxy命令

Curl设置代理proxy详解

设置代理proxy信息

Curl设置代理详解

Web代理服务器

curl代理设置

方法一:命令行参数

方法二:使用环境变量

方法三:使用别名

方法四:使用.curlrc 配置

实例:使用curl 提取网页的标题

结论


在 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。

Linux Curl命令详解

语法

url [option] [url] 

参数

参数 描述
option curl 命令使用的选项。
url 请求的 URL。

说明

使用 curl 命令,加上参数 option 给指定的 url 发送请求。

Curl命令参数

参数 描述
-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 进度条显示当前的传送状态

Curl模仿浏览器命令

我们在使用 Linux 的 curl 命令,访问网站时,可以通过 A 参数来指定我们访问该网站使用的指定的浏览器或者指定的浏览器的指定版本。

Curl模仿浏览器详解

语法

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 去访问了网站。

Curl伪造refer命令

我们在使用 Linux 的 curl 命令时,可以使用 e 参数,来伪造 refer 信息,以防止某些网站的防盗链功能屏蔽我们的访问。

很多服务器会检查 http 访问的 referer 从而来控制访问。比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的 referer 地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的 referer 地址不是首页的地址,就断定那是个盗链了。

Curl伪造refer详解

语法

url -e referUrl url 

参数

参数 描述
referUrl 模仿的 url 信息。
url 请求的 URL。

说明

我们使用 e 参数模仿请求的 url。

伪造refer

使用 curl 命令,可以伪造访问的 url 信息,来访问网站,具体命令如下:

url -e "www.haicoder.net" http://www.haicoder.net/uploads/pic/server/golang/golang-basic-syntax/01%20go%20helloworld.png 

运行后,终端输出如下:

Curl下载文件或网页详解

语法

curl -o fileName url 

参数

参数 描述
fileName 保存的文件名。
url 请求的 URL。

说明

我们使用 o 参数将 url 的信息保存到本地 fileName 文件中。

语法

curl -O url 

参数

参数 描述
url 请求的 URL。

说明

我们使用 O 参数将 url 的信息保存到本地文件中,文件名与服务器上的文件同名。

Curl下载进度条命令

我们使用 Linux 的 curl 命令,在下载文件时,还可以显示下载的进度条信息。

Curl下载进度条详解

语法

curl -# -O url 

参数

参数 描述
url 要下载的 url。

Curl断点续传命令

我们在使用 Linux 的 curl 命令,在下载文件时,还可以支持断点续传功能,即,我们下载文件过程中断线了,可以继续下载。

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

Curl上传文件命令

我们使用 Linux 的 curl 命令,不仅仅可以支持下载文件,还可以支持上传文件,我们通过参数 T 实现上传文件功能。

Curl上传文件详解

语法

url -T uploadFile -u username:password uploadUrl 

参数

参数 描述
uploadFile 需要上传的文件。
username 用户名。
password 密码。
uploadUrl 上传的 Url。

Curl上传文件命令总结

我们使用 Linux 的 curl 命令,不仅仅可以支持下载文件,还可以支持上传文件,我们通过参数 T 实现上传文件功能。

Curl获取错误命令

我们在使用 Linux 的 curl 命令时,可以使用 f 参数,显示获取的错误信息。

Curl获取错误详解

语法

url -f url 

参数

参数 描述
url 请求的 url。

获取错误

使用 curl 命令,可以获取错误信息,具体命令如下:

url -f www.haicoder.net

Curl GET请求命令

我们在使用 Linux 的 curl 命令时,可以实现 GET请求的功能,即可以模拟 HTTP 的 GET 请求。

Curl GET请求详解

语法

url "url?param1=val1&param2=val2" 

参数

参数 描述
url 请求的 URL。
param1 请求参数 1。
val1 请求参数 1 的值。
param2 请求参数 2。
val2 请求参数 2 的值。

说明

在发送 GET 请求时,请求参数放在 url 后面,因为有特殊字符 &,所以我们需要使用双引号进行包裹,或者,我们直接使用转义字符也可以,即 curl "url?param1=val1\&param2=val2"

Curl GET请求命令总结

我们在使用 Linux 的 curl 命令时,可以实现 GET请求的功能,即可以模拟 HTTP 的 GET 请求。

Curl POST请求命令

我们在使用 Linux 的 curl 命令时,可以实现 POST 请求的功能,即可以模拟 HTTP 的 POST 请求。

Curl 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 参数,设置我们请求的参数信息。

Curl POST请求详解

语法

url -H "Content-Type: application/json" -X POST -d '{"key1": "val1", "key2":val2}' url 

说明

我们使用了 H 参数,设置了请求的参数是 Json 类型。

Curl POST请求命令总结

我们在使用 Linux 的 curl 命令时,可以实现 POST 请求的功能,即可以模拟 HTTP 的 POST 请求。

Curl设置代理proxy命令

我们在使用 Linux 的 curl 命令,访问网站时,还可以使用 x 参数,来指定访问网站时使用的具体代理地址和端口。

Curl设置代理proxy详解

语法

url -x proxyAddr:proxyPort url 

参数

参数 描述
proxyAddr 代理 ip。
proxyPort 代理端口。
url 请求的 URL。

说明

我们使用 x 参数设置代理信息。

设置代理proxy信息

使用 curl 命令,访问网站时,可以设置代理信息,具体命令如下:

url -x 220.181.38.150 www.haicoder.net

Curl设置代理详解

Web代理服务器

Web代理服务器充当客户端和目标服务器之间的中介。客户端首先访问代理,然后代理执行它并将结果返回给客户端。

 

 有些Web站点是有限制的,我们无法直接通过当前IP直接访问目标站点;还有一些站点对访问请求是有一定限制,而我们在请求数据时候为了请求速度也需要突破IP限制。通过使用代理服务,我们就可以突破上述限制。

curl代理设置

为演示需要,本文中示例中使用的代理将设置为本地机器上,使用端口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"

方法四:使用.curlrc 配置

其实curl也支持个性化的配置参数配置,配置文件默认情况下在个人目录 ~/.curlrc(Windows上为 _curlrc),也可以指定其他文件路径。

在.curlrc配置文件中添加代理支持的方法为:

proxy = "http://127.0.0.1:5000"

实例:使用curl 提取网页的标题

最后举个更复杂的,我们使用unix管道将结合grep正则提取站点标题。

curl curl –silent baidu |grep -Eo '<title>(.*)</title>'

--silent参数可以去掉curl输出进度信息,对响应的内容用grep正则表达式中捕获标题。

结论

在本文中,我们介绍curl中使用代理服务器的各种方法,大家可以根据实际需要选择最合适方法。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gbz2000/article/details/132053965

智能推荐

在readthedocs上部署mkdocs文本报错AttributeError:module ‘jinja2‘ has no attribute ‘contextfilter‘解决_attributeerror: module 'jinja2' has no attribute '-程序员宅基地

文章浏览阅读700次。关于在readthedocs上部署mkdocs时遇到的问题_attributeerror: module 'jinja2' has no attribute 'contextfunction

tensorflow版本与cuda cuDNN版本对应使用_tensorflow2对应的cuda-程序员宅基地

文章浏览阅读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

UVA 147 Dollars 完全背包-程序员宅基地

文章浏览阅读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

SSM框架学习笔记之SpringMVC异常处理机制_ssm框架抛出异常-程序员宅基地

文章浏览阅读135次。SpringMVC的异常处理机制1.异常处理的思路  系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常而获取异常信息,后者主要通过规范代码开发、测试等手段减少运行时异常的发生。  系统的Dao、Service、Controller出现都通过throws Exception向上抛出,最后由SpringMVC前端控制器交由异常处理机制进行异常处理,如下图:2.异常处理两种方式(1)使用SpringMVC提供的简单异常处理器SimpleMappingExcep_ssm框架抛出异常

命令模式(Command)_command命令是干什么的-程序员宅基地

文章浏览阅读1.1k次。命令是一种行为设计模式它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。假如你正在开发一款新的文字编辑器,当前的任务是创建一个包含多个按钮的工具栏,并让每个按钮对应编译器的不同操作。你创建了一个「Button」类。它不仅用于生成工具栏上的按钮,还可用于生成各种对话框的通用按钮。尽管所有按钮看上去都很相似,但它们可以完成不同的操作(打开、保存、打印和应用等)。你会在哪里放置这些按钮的点击处理代码呢?最。_command命令是干什么的

前端移动端Swiper插件(使用方法)_移动端分页插件-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏2次。前端移动端Swiper插件(使用方法)_移动端分页插件

随便推点

STM32F103VET6+keil5+STM32CubeMX 点亮LED灯_stm32f103vet stm32cube-程序员宅基地

文章浏览阅读2k次。STM32F103VET6+keil5+STM32CubeMX 点亮LED灯_stm32f103vet stm32cube

Apk Installer —— 一款Windows下自动关联APK文件且双击APK安装到任意安卓设备上的工具-程序员宅基地

文章浏览阅读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

MicroStation V8i简体中文版完全补丁安装教程(附安装包下载)_microstation v8i 下载-程序员宅基地

文章浏览阅读4.5w次,点赞20次,收藏18次。MicroStation是一款非常不错的二维和三维设计软件,由奔特力(Bentley)工程软件系统有限公司开发的一款软件。在CAD设计上该软件是和AutoCAD是齐名的软件,其专用的文件格式是DGN,当然该软件还兼容AutoCAD的DWG/DXF等格式,该软件的应用已经非常广泛,在建筑、土木工程、交通运输、加工工厂、离散制造业、政府部门、公用事业和电讯网络等领域都有使用到该软件。小编今天带来的是..._microstation v8i 下载

matlab学习技巧之semilogx和semilogy函数_semilogx(t,y)是什么意思-程序员宅基地

文章浏览阅读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)是什么意思

耗时n年,38页《数据仓库知识体系.pdf》(数据岗位必备)_数据仓库设计:现代原理与方法pdf-程序员宅基地

文章浏览阅读10w+次,点赞197次,收藏780次。拥有本篇文章,意味着你拥有一本完善的书籍,本篇文章整理了数据仓库领域,几乎所有的知识点。_数据仓库设计:现代原理与方法pdf

Python之math标准库函数功能汇总_python里math库所有-程序员宅基地

文章浏览阅读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;amp;gt;&amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;am_python里math库所有