curl 命令详解

article/2025/10/27 14:04:31

curl 是一种命令行工具,作用是发出网络请求,然后获取数据,显示在"标准输出"(stdout)上面。它支持多种协议,下面列举其常用功能。

一、查看网页源码

直接在 curl 命令后加上网址,就可以看到网页源码。以网址 www.sina.com为例(选择该网址,主要因为它的网页代码较短)。

$ curl www.sina.com
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>

如果要把这个网页保存下来,可以使用 -o 参数:

$ curl -o [文件名] www.sina.com

d46eff65e11adc7c1656476e8487e86e.png

使用-o 参数保存后的文件:

061565d8dab1084129d28ed9c9bebdb1.png

文件内容:

39abea4529d34b554c6ead6a1c95b0ed.png

二、自动跳转

有的网址是自动跳转的。使用 -L 参数,curl 就会跳转到新的网址。

$ curl -L www.sina.com

键入上面的命令,结果自动跳转为 www.sina.com.cn。

三、显示头信息

-i 参数可以显示 http response 的头信息,连同网页代码一起。

-I 参数则只显示 http response 的头信息。

2b0186d94f408964135e14a1eb8af0a9.png

$ curl -i www.sina.comHTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 23 Aug 2016 08:30:16 GMT
Content-Type: text/html
Location: http://www.sina.com.cn/
Expires: Tue, 23 Aug 2016 08:32:16 GMT
Cache-Control: max-age=120
Age: 102
Content-Length: 178
X-Cache: HIT from xd33-83.sina.com.cn<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>

四、显示通信过程

-v 参数可以显示一次 http 通信的整个过程,包括端口连接和 http request 头信息。

2e048f2325a51d3123fe9bcb4c2b5fef.png

$ curl -v www.sina.com
* Rebuilt URL to: www.sina.com/
* Hostname was NOT found in DNS cache
*   Trying 202.108.33.60...
* Connected to www.sina.com (202.108.33.60) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: www.sina.com
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
* Server nginx is not blacklisted
< Server: nginx
< Date: Tue, 23 Aug 2016 08:48:14 GMT
< Content-Type: text/html
< Location: http://www.sina.com.cn/
< Expires: Tue, 23 Aug 2016 08:50:14 GMT
< Cache-Control: max-age=120
< Age: 40
< Content-Length: 178
< X-Cache: HIT from xd33-81.sina.com.cn
< 
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host www.sina.com left intac

如果觉得上面的信息还不够,那么下面的命令可以查看更详细的通信过程。

$ curl --trace output.txt www.sina.com
或者
$ curl --trace-ascii output.txt www.sina.com

运行后,打开 output.txt 文件查看。

五、发送表单信息

发送表单信息有 GET 和 POST 两种方法。GET 方法相对简单,只要把数据附在网址后面就行。默认是GET请求。

$ curl example.com/form.cgi?data=xxx

POST 方法必须把数据和网址分开,curl 就要用到 --data 或者 -d 参数。

传递字符串数据:
$ curl -X POST --data "data=xxx" example.com/form.cgi
传递json数据:
curl -X POST -d "{\"abc\":123}" "https://httpbin.org/post" -H "Content-Type: application/json"

json数据放在一个文件里 -H是--header 简称。

curl -H "Content-Type: application/json" -X POST -d @test.json URL

如果你的数据没有经过表单编码,还可以让 curl 为你编码,参数是 --data-urlencode

$ curl -X POST--data-urlencode "date=April 1" example.com/form.cgi

六、HTTP动词

curl 默认的 HTTP 动词是 GET,使用 -X 参数可以支持其他动词。

$ curl -X POST www.example.com
$ curl -X DELETE www.example.com

七、User Agent字段

这个字段是用来表示客户端的设备信息。服务器有时会根据这个字段,针对不同设备,返回不同格式的网页,比如手机版和桌面版。
浏览器的 User Agent 是:

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36

curl 可以这样模拟:

$ curl --user-agent "[User Agent]" [URL]

八、cookie

使用 --cookie 参数,可以让 curl 发送 cookie。

$ curl --cookie "name=xxx" www.example.com

至于具体的 cookie 的值,可以从 http response 头信息的 Set-Cookie 字段中得到。

九、增加头信息

有时需要在 http request 之中,自行增加一个头信息。--header 参数就可以起到这个作用。

$ curl --header "Content-Type:application/json" http://example.com

十、HTTP认证

有些网域需要 HTTP 认证,这时 curl 需要用到 --user 或者 -u 参数。

$ curl --user name:password example.com

b31bcb7df40a73463bd18e6ecfd9db63.jpeg


http://chatgpt.dhexx.cn/article/Z63iYcBy.shtml

相关文章

强大的curl命令的介绍和一般用法

curl&#xff0c;全称CommandLine URL 或 CommandLine Uniform Resource Locator&#xff0c;顾名思义&#xff0c;curl命令是在命令行方式下工作&#xff0c;利用URL的语法进行数据的传输或者文件的传输。 这个命令行工具现在多用于Unix和Linux操作系统&#xff0c;是一个开源…

linux之curl命令

curl命令 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载&#xff0c;所以是综合传输工具&#xff0c;但按传统&#xff0c;习惯称curl为下载工具。作为一款强力工具&#xff0c;curl支持包括HTTP、HTTPS、ftp等众多协议&#xff0c;还支持POST、cook…

curl命令介绍与使用

curl&#xff0c;全称CommandLine URL 或 CommandLine Uniform Resource Locator&#xff0c;顾名思义&#xff0c;curl命令是在命令行方式下工作&#xff0c;利用URL的语法进行数据的传输或者文件的传输。 这个命令行工具现在多用于Unix和Linux操作系统&#xff0c;是一个开源…

Linux系统中curl命令用法详解

在Linux系统中curl是一个利用URL规则在命令行下工作的文件传输工具&#xff0c;是一款强大的http命令行工具。它支持文件的上传和下载&#xff0c;是综合传输工具。 curl 是常用的命令行工具&#xff0c;用来请求 Web 服务器。它的名字就是客户端&#xff08;client&#xff09…

强大的curl命令的介绍和一般用法(*)

curl&#xff0c;全称CommandLine URL 或 CommandLine Uniform Resource Locator&#xff0c;顾名思义&#xff0c;curl命令是在命令行方式下工作&#xff0c;利用URL的语法进行数据的传输或者文件的传输。&#xff08;可以使用curl命令执行url接口&#xff09; 这个命令行工具…

CURL命令详解

curl -v http://ip:port/service/name/op?param11\&param20\&param3"\[\{\"value\":1,\"value\":1\}\]" 能正常发送&#xff0c;但服务器端接收不到参数&#xff0c;原因大概是service只接受post请求 curl -v --globoff http://ip:…

常见的curl命令大全

1.发送 HTTP 请求:使用 curl 发送 HTTP 请求,例如: curl http://example.com/2.保存下载的文件:使用 -O 或 -o 参数可以将下载的文件保存到本地,例如 curl -O http://example.com/file.zip curl -o localfile.txt http://example.com/remote.txt3.设置 HTTP 请求头:使用…

curl命令

目录 一、最常用的curl命令 1、发送GET请求 2、发送POST请求 3、发送json格式请求&#xff1a; 二、curl命令语法与curl命令参数详解 1、curl命令语法 2、curl命令参数详解 三、Linux curl命令退出码 四、常见用法 1、下载(option:-o或者option:-O) 2、上传文件(opti…

Linux curl命令最全详解

目录 一、最常用的curl命令 1、发送GET请求 2、发送POST请求 3、发送json格式请求&#xff1a; 二、curl命令语法与curl命令参数详解 1、curl命令语法 2、curl命令参数详解 三、Linux curl命令退出码 四、常见用法 1、下载(option:-o或者option:-O) 2、上传文件(opti…

QT多线程实战

文章目录 需求的提出多线程线程间通信终止多线程 本文源码&#xff1a; QT多线程实战 需求的提出 窗口本身就是一个死循环&#xff0c;在这样一个死循环中执行任何耗时的操作&#xff0c;都会导致程序崩溃。所以多线程对于窗口编程而言是必要的。 例如&#xff0c;在窗口中拖…

Qt多线程之死锁

目录 一、造成死锁的原因 现象分析 二、死锁的概念和发生条件 三、死锁的避免 四、避免死锁的示例代码 一、造成死锁的原因 一般性原则&#xff0c;每个临界资源都需要一个线程锁来进行保护&#xff0c;假设有多个线程锁该怎么设计程序呢&#xff1f;先来看以下的一个示例…

QT多线程网络通信

QT多线程网络通信 使用QT提供的类进行基于TCP的套接字通信需要用到两个类&#xff1a; 1、QTcpServer 服务器类&#xff0c;用于监听客户端连接以及和客户端建立连接 2、QTcpSocket 通信的套接字类&#xff0c;客户端、服务器端都需要使用 ​ 这两个套接字通信类都属于网络…

QT 多线程应用

QT多线程的实现有两种方法&#xff0c;一种是继承QThread的多线程使用方法&#xff0c;另外一种是使用QObject实现多线的方法。传统的方式是继承QTread&#xff0c;但是这种方式比较的容易出错&#xff0c;QT官方推荐使用的是第二种方式。这里介绍这两种方式的最简单的一种创建…

Qt 多线程(QThread)

Qt 多线程&#xff08;QThread&#xff09; 一.理解QThread 关于QThread&#xff0c;参考qt助手中的解析 Detailed Description A QThread object manages one thread of control within the program. QThreads begin executing in run(). By default, run() starts the eve…

QT 多线程的实现方法以及GUI线程与其他线程间的通信

GUI线程 Qt应用程序exec后就会生成一个线程&#xff0c;这个线程就是主线程&#xff0c;在GUI程序中也称为GUI线程。主线程也是唯一允许创建QApplication或QCoreAppliation对象&#xff0c;比并且可以对创建的对象调用exec()的线程&#xff0c;从而进入事件循环。 在只有主线…

QT多线程接收串口数据

** QT多线程接收串口数据 ** 1.前言 QT多线程的使用&#xff0c;和绝大数人一样&#xff0c;犯了错误&#xff08;请查阅Qt开发人员( Bradley T. Hughes)Blog中的文章 you are-doing-it-wrong介绍&#xff09;。为了解决问题&#xff0c;网上查阅学习了几十篇文章&#xff0c…

Qt多线程互斥

目录 一、多线程与临界资源的依赖 现象分析 二、互斥和解决方法 三、QMutex的主要成员函数和使用 四、示例代码 五、小结 一、多线程与临界资源的依赖 除了上一节所说的&#xff0c;多线程在代码执行的时序上会有依赖&#xff0c;那么其他地方是否还有所依赖呢&#xff…

QT 多线程创建方法及应用实例

QT 多线程创建方法及应用实例 方法一&#xff1a; &#xff08;1&#xff09;创建一个QT应用 &#xff08;2&#xff09;创建线程类&#xff0c;继承QThread simplethreadone.h #ifndef SIMPLETHREADONE_H #define SIMPLETHREADONE_H #include <QThread>class SimpleThr…

Qt 多线程专栏

主线程就是进程&#xff0c;进程代表4个G的资源空间&#xff0c;主线程退出就意味着进程退出&#xff0c;在Qt中&#xff0c;主线程不能是子线程的父对象&#xff0c;因此必须在线程的析构函数中去delete线程对象。 只要定时器启动&#xff0c;自动触发timeout()信号 类A继承了…

Qt多线程编程

由于疫情原因被封控在家&#xff0c;相信大家也有跟我类似的情况&#xff0c;在学习知识提升和充实自己&#xff0c;下面我将这几天在学习的Qt多线程编程做个简单的总结&#xff0c;随此笔记的还有几个简单的例子&#xff0c;以便后续开发过程中回忆和参考。 Qt的多线程开发&am…