热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

curl命令与HTTP请求

curl介绍curl是一个运行在命令行的http客户端。使用curl命令可以发起http请求并返回结果。相信很多开发者都喜欢使用图形化界面工具(例如Postman)来进行API的调
curl介绍

curl 是一个运行在命令行的 http 客户端。使用
curl 命令可以发起 http 请求并返回结果。

相信很多开发者都喜欢使用图形化界面工具(例如 Postman)来进行 API 的调试。但是我觉得了解 curl 命令行工具,会给开发带来很大的帮助,可以让开发者更直观地了解 http 请求,也方便了开发过程中的沟通与交流。

curl的使用

注意:Windows 系统是没有
curl 命令的,要想 Windows 中使用它,可以使用
Git Bash 或者
Cygwin。

curl [options] [URL...]

先来尝试一下不加任何参数请求百度首页和 一言 API。

curl https://www.baidu.com

《curl命令与HTTP请求》

curl https://v1.hitokoto.cn/

《curl命令与HTTP请求》

可以看到返回的信息都是一串文本(字符串)。当所请求的内容是html(百度首页)时返回html文本;当请求的内容是JSON API(一言 API)时返回JSON文本。在浏览器中,浏览器便是根据这文本内容来进行页面渲染。

不加任何参数使用 curl 命令只是返回http的响应正文内容(后面有提到),如果要想查看完整的http请求信息可以加上 -v 参数。

curl -v https://v1.hitokoto.cn/

《curl命令与HTTP请求》

此时http请求的完整信息被打印出来,这些信息便是http的 请求报文响应报文

HTTP请求

HTTP请求可以看成向服务器发送字符串,服务器收到后返回字符串的过程。向服务器发送的字符串称为 请求报文,而服务器返回的字符串称为 响应报文

请求报文

一个HTTP请求报文由 请求行请求头空行请求数据 4个部分组成。

  • 请求行
    请求行由请求方法、URL和HTTP协议版本组成。例如,GET /index.html HTTP/1.1。
    HTTP的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
  • 请求头
    请求头由键/值对组成,每行一对,键与值之间用冒号分隔。常见的请求头有:
    User-Agent:产生请求的浏览器类型。
    Accept:客户端可识别的内容类型列表。
    Host:请求的主机名。
  • 空行
    最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
  • 请求数据
    请求数据不在GET方法中使用,而是在POST方法中使用。

响应报文

响应报文由 状态行响应头响应正文 3个部分组成。

  • 状态行
    返回HTTP状态码来说明所请求的资源情况。
    常见的状态码有 200 OK(请求成功),403 Forbidden(服务器收到请求,但是拒绝提供服务),404 Not Found(请求资源不存在)。
  • 响应头
    响应头和请求头一样,由键/值对组成,每行一对,键与值之间用冒号分隔。
  • 响应正文
    响应的正文内容,也就是上面所说的当 curl 命令不加 -v 参数时返回的内容。

在上面的例子中它们的具体位置如下

> GET / HTTP/1.1 (请求行)
> Host: v1.hitokoto.cn (请求头)
> User-Agent: curl/7.64.0 (请求头)
> Accept: */* (请求头)
> (空行)
<(下面是响应正文)
{
"id": 708,
"hitokoto": "彼方为谁,无我有问 ;九月露湿,待君之前",
"type": "a",
"from": "你的名字",
"creator": "moe",
"created_at": "1477825585"
}* Connection #0 to host v1.hitokoto.cn left intact
curl命令的常用参数

curl 命令的常用参数有:

  • -X // 设置请求方法
  • -H // 设置请求头
  • -D // 设置请求数据(POST方法)

例子:

curl 'https://v1.hitokoto.cn/' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' -H 'COOKIE: _ga=GA1.2.303411826.1562744042' -D 'c=b'

上面的例子表示

  • POST 请求 https://v1.hitokoto.cn/,由于添加了 -D 参数,所以 -X POST 参数可以不写
  • 添加了两个 请求头,分别是 User-Agent,和 COOKIE
  • 添加了一个 请求数据c=b。若 请求数据 有多个时,用 & 连接。

另外,在现代浏览器的开发者工具中,有一个很方便的功能,可以复制所请求的 curl 命令。

《curl命令与HTTP请求》

复制出来的结果:

curl 'https://v1.hitokoto.cn/' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9' -H 'COOKIE: _ga=GA1.2.303411826.1562744042' --compressed

当调试 api 接口出现问题时,我们就可以直接发送这段命令给其他开发者,只需粘贴到终端运行,便能知道问题所在,可以说是相当的方便。

参考资料

  • 一次完整的HTTP请求所经历的7个步骤

推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 在2019中国国际智能产业博览会上,百度董事长兼CEO李彦宏强调,人工智能应务实推进其在各行业的应用。随后,在“ABC SUMMIT 2019百度云智峰会”上,百度展示了通过“云+AI”推动AI工业化和产业智能化的最新成果。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
  • 如何在PHP中准确获取服务器IP地址?
    如何在PHP中准确获取服务器IP地址? ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
author-avatar
oz法卡山英雄营
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有