书籍详情
cURL必知必会
作者:[瑞典] 丹尼尔·斯坦伯格 著,薛命灯 译
出版社:人民邮电出版社
出版时间:2020-01-01
ISBN:9787115523860
定价:¥59.00
购买这本书可以去
内容简介
curl是一个利用URL语法在命令行下工作的文件传输工具,支持文件上传和下载。作为cURL项目的创造人和负责人,作者结合自己的开发和使用经验,为我们提供了curl的详尽指南。书中内容涵盖cURL项目介绍、作为命令行工具的用法、作为函数库的用法,等等。
作者简介
cURL项目首席开发者,2017年瑞典Polhem奖章获得者,主要从事开源和自由软件开发。作为一名互联网协议极客,他从1985年就开始编程,并以此为生。他为wolfSSL提供curl商业支持,还在IETF(国际互联网工程任务组)任职,专注HTTPbis和QUIC。他也会时不时地发表公开演讲,并在twitch上教人怎么开发curl。【译者简介】毕业于厦门大学软件学院,十余年软件开发和架构经验,InfoQ高级社区编辑,译有《硅谷革命》《生产微服务》《Kafka**指南》等书。微信公众号CodeDeep。
目录
第 1 章 cURL项目 1
1.1 它是如何开始的 2
1.2.1 发音问题 2
1.2.2 混淆 2
1.2.3 作为动词 2
1.3 curl可以做什么 3
1.3.1 命令行工具curl 3
1.3.2 libcurl库 3
1.4 开发团队 4
1.5 curl的用户 5
1.5.1 开源 5
1.5.2 下载量 5
1.5.3 找出用户 6
1.5.4 命令行工具用户 6
1.5.5 嵌入式库 6
1.5.6 网站后端 6
1.5.7 著名的用户 6
第 2 章 命令行基础 8
2.1 命令行选项 9
2.1.1 短选项 9
2.1.2 长选项 10
2.1.3 选项的参数 10
2.1.4 带空格的参数 10
2.1.5 负选项 11
2.2 不同版本的选项 11
2.3 URL 11
2.3.1 scheme 12
2.3.2 scheme分隔符 12
2.3.3 不使用scheme 13
2.3.4 用户名和密码 13
2.3.5 主机名或地址 13
2.3.6 端口号 13
2.3.7 路径 14
2.3.8 FTP类型 14
2.3.9 片段 15
2.3.10 浏览器的“地址栏” 15
2.3.11 多个选项和多个URL 15
2.3.12 URL的单独选项 15
2.3.13 连接重用 16
2.4 URL通配 16
2.4.1 数值范围 16
2.4.2 字母范围 17
2.4.3 列表 17
2.4.4 组合 17
2.4.5 输出变量 17
2.5 列出所有的命令行选项 18
2.6 配置文件 18
2.7 密码和窥探 20
2.7.1 命令行泄露 20
2.7.2 网络泄露 20
2.8 进度指示器 20
2.8.1 单位 21
2.8.2 进度指示器图例 21
第 3 章 使用curl 23
3.1 详细模式 23
3.1.1 --trace和--trace-ascii 25
3.1.2 --trace-time 26
3.1.3 HTTP 2 27
3.1.4 --write-out 27
3.1.5 可用的--write-out 变量 27
3.1.6 静默模式 29
3.2 持久连接 29
3.3 下载 29
3.3.1 究竟下载了哪些内容 29
3.3.2 保存下载的内容 30
3.3.3 用URL指定的文件名保存内容 30
3.3.4 从服务器获取目标文件名 31
3.3.5 HTML和字符集 31
3.3.6 压缩 31
3.3.7 shell重定向 32
3.3.8 多个下载 32
3.3.9 让所有URL使用自己的文件名 33
3.3.10 “我的浏览器显示的是其他内容” 33
3.3.11 客户端差异 33
3.3.12 服务器端差异 34
3.3.13 中介的欺骗 34
3.3.14 速率限定 34
3.3.15 最大的文件 35
3.3.16 Metalink 35
3.3.17 在文件系统中保存元数据 36
3.3.18 --raw 36
3.3.19 失败重试 36
3.3.20 恢复下载和下载范围 36
3.4 上传 37
3.4.1 支持上传的协议 37
3.4.2 HTTP 提供了几种“上传”方式 37
3.4.3 POST 37
3.4.4 multipart formpost 38
3.4.5 PUT 38
3.4.6 FTP上传 38
3.4.7 SMTP上传 38
3.4.8 上传的进度指示器 39
3.4.9 速率限定 39
3.5 连接 39
3.5.1 主机名解析技巧 39
3.5.2 基于c-ares库的域名解析 41
3.5.3 连接超时 41
3.5.4 网络接口 41
3.5.5 本地端口号 42
3.5.6 keepalive 42
3.6 超时 43
3.6.1 允许的最长时间 43
3.6.2 允许的最长连接时间 43
3.6.3 传输速率慢到一定程度就退出 43
3.6.4 保持连接活跃 44
3.7 .netrc 44
3.7.1 .netrc的文件格式 44
3.7.2 启用netrc 45
3.8 代理 45
3.8.1 发现你的代理 45
3.8.2 PAC 46
3.8.3 代理类型 46
3.8.4 HTTP 46
3.8.5 HTTPS和代理 46
3.8.6 MITM代理 47
3.8.7 HTTP代理与非HTTP协议 47
3.8.8 HTTP代理通道 47
3.8.9 SOCKS类型 48
3.8.10 代理身份验证 48
3.8.11 使用HTTPS连接代理 49
3.8.12 代理环境变量 49
3.9 退出状态 50
3.9.1 可用的退出码 50
3.9.2 错误消息 56
3.9.3 “未使用” 56
3.10 FTP 56
3.10.1 ping-pong 56
3.10.2 传输模式 57
3.10.3 身份验证 57
3.10.4 FTP使用两个连接 57
3.10.5 如何遍历目录 58
3.10.6 高级FTP特性 59
3.11 SCP和SFTP 60
3.11.1 URL 60
3.11.2 已知的主机 61
3.12 SMTP 62
3.12.1 示例(email.txt) 62
3.12.2 安全的邮件传输 63
3.12.3 SMTP URL 63
3.12.4 不进行MX查找 63
3.13 TLS 64
3.13.1 密码 64
3.13.2 启用TLS 64
3.13.3 SSL和TLS版本 65
3.13.4 验证服务器证书 66
3.13.5 CA存储 66
3.13.6 证书固定 67
3.13.7 OCSP装订 67
3.13.8 客户端证书 68
3.14 SSLKEYLOGFILE 8
3.15 复制为curl命令 69
3.15.1 Firefox 69
3.15.2 Chrome 70
3.15.3 Safari 70
3.15.4 不使用Firefox的开发者工具 71
3.15.5 不完美 71
第 4 章 用curl执行HTTP操作 72
4.1 协议基础 72
4.1.1 HTTP方法 72
4.1.2 HTTP协议基础 72
4.1.3 将URL转换为请求 73
4.1.4 --path-as-is 73
4.2 响应 74
4.2.1 HTTP响应 74
4.2.2 HTTP响应消息的大小 74
4.2.3 HTTP响应码 74
4.2.4 CONNECT响应码 75
4.2.5 分块传输编码 75
4.2.6 gzip压缩传输 75
4.2.7 压缩传输编码 75
4.2.8 传递传输编码 76
4.3 HTTP身份验证 76
4.4 HTTP区间 77
4.5 HTTP版本 78
4.6 HTTP POST 78
4.6.1 Content-Type 79
4.6.2 POST二进制内容 79
4.6.3 URL编码 79
4.6.4 转换为GET 80
4.6.5 Expect: 100-continue 80
4.6.6 分块编码的POST 81
4.6.7 隐藏的表单字段 81
4.6.8 了解浏览器都发送了些什么 81
4.6.9 JavaScript和表单 82
4.7 HTTP multipart formpost 82
4.7.1 使用curl发送表单 83
4.7.2 生成的HTTP内容 83
4.7.3 Content-Type 84
4.8 -d与-F 84
4.8.1 HTML Web表单 84
4.8.2 HTML之外的POST 85
4.9 重定向 85
4.9.1 HTTP重定向 85
4.9.2 永久重定向和临时重定向 85
4.9.3 让curl遵循重定向 86
4.9.4 GET还是POST 86
4.9.5 决定在重定向中使用哪种方法 87
4.9.6 重定向到其他主机 87
4.9.7 非HTTP重定向 87
4.9.8 HTML重定向 87
4.9.9 JavaScript重定向 87
4.10 修改HTTP请求 88
4.10.1 请求方法 88
4.10.2 自定义标头 88
4.10.3 referer 89
4.10.4 User-Agent 89
4.10.5 时间条件 90
4.11 PUT 90
4.12 cookie 91
4.12.1 cookie引擎 91
4.12.2 从文件中读取cookie 91
4.12.3 将cookie写入文件 92
4.12.4 新cookie会话 92
4.13 HTTP 2 92
第 5 章 构建和安装 94
5.1 安装预构建的二进制包 94
5.2 从源代码构建 96
5.2.1 git与tarball 96
5.2.2 在Linux和类Unix系统上 96
5.2.3 自动工具 97
5.2.4 选择TLS后端 97
5.3 依赖项 98
5.3.1 zlib 98
5.3.2 c-ares 98
5.3.3 libssh2 98
5.3.4 nghttp2 98
5.3.5 openldap 98
5.3.6 librtmp 99
5.3.7 libmetalink 99
5.3.8 libpsl 99
5.3.9 libidn2 99
5.4 TLS库 99
5.4.1 用TLS库构建curl 99
5.4.2 使用boringssl构建curl 102
第 6 章 libcurl基础 103
6.1 easy句柄 103
6.2 “驱动”传输 104
6.2.1 使用easy接口 105
6.2.2 使用multi接口 105
6.2.3 单个传输什么时候结束 107
6.2.4 使用multi_socket接口 107
6.2.5 选择一个 108
6.2.6 多个easy句柄 108
6.2.7 multi_socket回调 108
6.2.8 如何开始传输 109
6.2.9 什么时候结束 110
6.3 连接重用 110
6.3.1 easy API连接池 110
6.3.2 multi API连接池 110
6.3.3 共享“连接缓存” 111
6.4 回调 111
6.4.1 写回调 111
6.4.2 读回调 112
6.4.3 进度回调 112
6.4.4 标头回调 113
6.4.5 调试回调 114
6.4.6 sockopt回调 114
6.4.7 opensocket和closesocket回调 115
6.4.8 提供文件描述符 115
6.4.9 closesocket回调 116
6.5 清理 116
6.5.1 multi API 116
6.5.2 easy句柄 116
6.5.3 域名解析器后端 117
6.6 代理 118
6.6.1 代理类型 118
6.6.2 本地或代理域名查找 119
6.6.3 哪个代理 119
6.6.4 代理环境变量 119
6.6.5 HTTP代理 120
6.6.6 HTTPS代理 120
6.7 传输后的信息 121
6.7.1 可用的信息 121
6.7.2 在句柄之间共享数据 123
6.7.3 multi句柄 123
6.7.4 在easy句柄间共享数据 123
6.7.5 共享什么 123
6.7.6 锁定 124
6.8 API兼容性 124
6.8.1 版本号 124
6.8.2 版本号数字的变化 125
6.8.3 哪个libcurl版本 125
6.8.4 运行的是哪个libcurl版本 126
6.9 curl --libcurl 127
6.10 头文件 128
6.11 全局初始化 128
6.12 libcurl多线程 129
6.13 curl easy选项 129
6.13.1 设置句柄选项 129
6.13.2 设置数字选项 129
6.13.3 获取句柄选项 130
6.14 CURLcode返回码 130
6.15 详细操作 130
6.16 libcurl示例 131
6.16.1 获取一个简单的HTML页面 131
6.16.2 获取HTML页面并保存在内存中 132
第 7 章 用libcurl执行HTTP操作 135
7.1 HTTP响应 135
7.1.1 HTTP响应码 135
7.1.2 关于HTTP的“错误”响应码 136
7.2 HTTP请求 136
7.2.1 请求方法 136
7.2.2 自定义HTTP请求标头 137
7.3 HTTP版本 139
7.4 HTTP区间 139
7.4.1 HTTP身份验证 140
7.4.2 用户名和密码 140
7.4.3 要求进行身份验证 140
7.4.4 Basic 140
7.5 在libcurl中处理cookie 141
7.5.1 cookie引擎 141
7.5.2 设置自定义cookie 142
7.5.3 导入和导出 142
7.5.4 cookie文件格式 143
7.6 下载 144
7.6.1 使用libcurl进行HTTP下载 144
7.6.2 同时下载标头 144
7.7 上传 145
7.7.1 HTTP上传 145
7.7.2 HTTP POST 145
7.7.3 HTTP multipart formpost 145
第 8 章 语言绑定 146
1.1 它是如何开始的 2
1.2.1 发音问题 2
1.2.2 混淆 2
1.2.3 作为动词 2
1.3 curl可以做什么 3
1.3.1 命令行工具curl 3
1.3.2 libcurl库 3
1.4 开发团队 4
1.5 curl的用户 5
1.5.1 开源 5
1.5.2 下载量 5
1.5.3 找出用户 6
1.5.4 命令行工具用户 6
1.5.5 嵌入式库 6
1.5.6 网站后端 6
1.5.7 著名的用户 6
第 2 章 命令行基础 8
2.1 命令行选项 9
2.1.1 短选项 9
2.1.2 长选项 10
2.1.3 选项的参数 10
2.1.4 带空格的参数 10
2.1.5 负选项 11
2.2 不同版本的选项 11
2.3 URL 11
2.3.1 scheme 12
2.3.2 scheme分隔符 12
2.3.3 不使用scheme 13
2.3.4 用户名和密码 13
2.3.5 主机名或地址 13
2.3.6 端口号 13
2.3.7 路径 14
2.3.8 FTP类型 14
2.3.9 片段 15
2.3.10 浏览器的“地址栏” 15
2.3.11 多个选项和多个URL 15
2.3.12 URL的单独选项 15
2.3.13 连接重用 16
2.4 URL通配 16
2.4.1 数值范围 16
2.4.2 字母范围 17
2.4.3 列表 17
2.4.4 组合 17
2.4.5 输出变量 17
2.5 列出所有的命令行选项 18
2.6 配置文件 18
2.7 密码和窥探 20
2.7.1 命令行泄露 20
2.7.2 网络泄露 20
2.8 进度指示器 20
2.8.1 单位 21
2.8.2 进度指示器图例 21
第 3 章 使用curl 23
3.1 详细模式 23
3.1.1 --trace和--trace-ascii 25
3.1.2 --trace-time 26
3.1.3 HTTP 2 27
3.1.4 --write-out 27
3.1.5 可用的--write-out 变量 27
3.1.6 静默模式 29
3.2 持久连接 29
3.3 下载 29
3.3.1 究竟下载了哪些内容 29
3.3.2 保存下载的内容 30
3.3.3 用URL指定的文件名保存内容 30
3.3.4 从服务器获取目标文件名 31
3.3.5 HTML和字符集 31
3.3.6 压缩 31
3.3.7 shell重定向 32
3.3.8 多个下载 32
3.3.9 让所有URL使用自己的文件名 33
3.3.10 “我的浏览器显示的是其他内容” 33
3.3.11 客户端差异 33
3.3.12 服务器端差异 34
3.3.13 中介的欺骗 34
3.3.14 速率限定 34
3.3.15 最大的文件 35
3.3.16 Metalink 35
3.3.17 在文件系统中保存元数据 36
3.3.18 --raw 36
3.3.19 失败重试 36
3.3.20 恢复下载和下载范围 36
3.4 上传 37
3.4.1 支持上传的协议 37
3.4.2 HTTP 提供了几种“上传”方式 37
3.4.3 POST 37
3.4.4 multipart formpost 38
3.4.5 PUT 38
3.4.6 FTP上传 38
3.4.7 SMTP上传 38
3.4.8 上传的进度指示器 39
3.4.9 速率限定 39
3.5 连接 39
3.5.1 主机名解析技巧 39
3.5.2 基于c-ares库的域名解析 41
3.5.3 连接超时 41
3.5.4 网络接口 41
3.5.5 本地端口号 42
3.5.6 keepalive 42
3.6 超时 43
3.6.1 允许的最长时间 43
3.6.2 允许的最长连接时间 43
3.6.3 传输速率慢到一定程度就退出 43
3.6.4 保持连接活跃 44
3.7 .netrc 44
3.7.1 .netrc的文件格式 44
3.7.2 启用netrc 45
3.8 代理 45
3.8.1 发现你的代理 45
3.8.2 PAC 46
3.8.3 代理类型 46
3.8.4 HTTP 46
3.8.5 HTTPS和代理 46
3.8.6 MITM代理 47
3.8.7 HTTP代理与非HTTP协议 47
3.8.8 HTTP代理通道 47
3.8.9 SOCKS类型 48
3.8.10 代理身份验证 48
3.8.11 使用HTTPS连接代理 49
3.8.12 代理环境变量 49
3.9 退出状态 50
3.9.1 可用的退出码 50
3.9.2 错误消息 56
3.9.3 “未使用” 56
3.10 FTP 56
3.10.1 ping-pong 56
3.10.2 传输模式 57
3.10.3 身份验证 57
3.10.4 FTP使用两个连接 57
3.10.5 如何遍历目录 58
3.10.6 高级FTP特性 59
3.11 SCP和SFTP 60
3.11.1 URL 60
3.11.2 已知的主机 61
3.12 SMTP 62
3.12.1 示例(email.txt) 62
3.12.2 安全的邮件传输 63
3.12.3 SMTP URL 63
3.12.4 不进行MX查找 63
3.13 TLS 64
3.13.1 密码 64
3.13.2 启用TLS 64
3.13.3 SSL和TLS版本 65
3.13.4 验证服务器证书 66
3.13.5 CA存储 66
3.13.6 证书固定 67
3.13.7 OCSP装订 67
3.13.8 客户端证书 68
3.14 SSLKEYLOGFILE 8
3.15 复制为curl命令 69
3.15.1 Firefox 69
3.15.2 Chrome 70
3.15.3 Safari 70
3.15.4 不使用Firefox的开发者工具 71
3.15.5 不完美 71
第 4 章 用curl执行HTTP操作 72
4.1 协议基础 72
4.1.1 HTTP方法 72
4.1.2 HTTP协议基础 72
4.1.3 将URL转换为请求 73
4.1.4 --path-as-is 73
4.2 响应 74
4.2.1 HTTP响应 74
4.2.2 HTTP响应消息的大小 74
4.2.3 HTTP响应码 74
4.2.4 CONNECT响应码 75
4.2.5 分块传输编码 75
4.2.6 gzip压缩传输 75
4.2.7 压缩传输编码 75
4.2.8 传递传输编码 76
4.3 HTTP身份验证 76
4.4 HTTP区间 77
4.5 HTTP版本 78
4.6 HTTP POST 78
4.6.1 Content-Type 79
4.6.2 POST二进制内容 79
4.6.3 URL编码 79
4.6.4 转换为GET 80
4.6.5 Expect: 100-continue 80
4.6.6 分块编码的POST 81
4.6.7 隐藏的表单字段 81
4.6.8 了解浏览器都发送了些什么 81
4.6.9 JavaScript和表单 82
4.7 HTTP multipart formpost 82
4.7.1 使用curl发送表单 83
4.7.2 生成的HTTP内容 83
4.7.3 Content-Type 84
4.8 -d与-F 84
4.8.1 HTML Web表单 84
4.8.2 HTML之外的POST 85
4.9 重定向 85
4.9.1 HTTP重定向 85
4.9.2 永久重定向和临时重定向 85
4.9.3 让curl遵循重定向 86
4.9.4 GET还是POST 86
4.9.5 决定在重定向中使用哪种方法 87
4.9.6 重定向到其他主机 87
4.9.7 非HTTP重定向 87
4.9.8 HTML重定向 87
4.9.9 JavaScript重定向 87
4.10 修改HTTP请求 88
4.10.1 请求方法 88
4.10.2 自定义标头 88
4.10.3 referer 89
4.10.4 User-Agent 89
4.10.5 时间条件 90
4.11 PUT 90
4.12 cookie 91
4.12.1 cookie引擎 91
4.12.2 从文件中读取cookie 91
4.12.3 将cookie写入文件 92
4.12.4 新cookie会话 92
4.13 HTTP 2 92
第 5 章 构建和安装 94
5.1 安装预构建的二进制包 94
5.2 从源代码构建 96
5.2.1 git与tarball 96
5.2.2 在Linux和类Unix系统上 96
5.2.3 自动工具 97
5.2.4 选择TLS后端 97
5.3 依赖项 98
5.3.1 zlib 98
5.3.2 c-ares 98
5.3.3 libssh2 98
5.3.4 nghttp2 98
5.3.5 openldap 98
5.3.6 librtmp 99
5.3.7 libmetalink 99
5.3.8 libpsl 99
5.3.9 libidn2 99
5.4 TLS库 99
5.4.1 用TLS库构建curl 99
5.4.2 使用boringssl构建curl 102
第 6 章 libcurl基础 103
6.1 easy句柄 103
6.2 “驱动”传输 104
6.2.1 使用easy接口 105
6.2.2 使用multi接口 105
6.2.3 单个传输什么时候结束 107
6.2.4 使用multi_socket接口 107
6.2.5 选择一个 108
6.2.6 多个easy句柄 108
6.2.7 multi_socket回调 108
6.2.8 如何开始传输 109
6.2.9 什么时候结束 110
6.3 连接重用 110
6.3.1 easy API连接池 110
6.3.2 multi API连接池 110
6.3.3 共享“连接缓存” 111
6.4 回调 111
6.4.1 写回调 111
6.4.2 读回调 112
6.4.3 进度回调 112
6.4.4 标头回调 113
6.4.5 调试回调 114
6.4.6 sockopt回调 114
6.4.7 opensocket和closesocket回调 115
6.4.8 提供文件描述符 115
6.4.9 closesocket回调 116
6.5 清理 116
6.5.1 multi API 116
6.5.2 easy句柄 116
6.5.3 域名解析器后端 117
6.6 代理 118
6.6.1 代理类型 118
6.6.2 本地或代理域名查找 119
6.6.3 哪个代理 119
6.6.4 代理环境变量 119
6.6.5 HTTP代理 120
6.6.6 HTTPS代理 120
6.7 传输后的信息 121
6.7.1 可用的信息 121
6.7.2 在句柄之间共享数据 123
6.7.3 multi句柄 123
6.7.4 在easy句柄间共享数据 123
6.7.5 共享什么 123
6.7.6 锁定 124
6.8 API兼容性 124
6.8.1 版本号 124
6.8.2 版本号数字的变化 125
6.8.3 哪个libcurl版本 125
6.8.4 运行的是哪个libcurl版本 126
6.9 curl --libcurl 127
6.10 头文件 128
6.11 全局初始化 128
6.12 libcurl多线程 129
6.13 curl easy选项 129
6.13.1 设置句柄选项 129
6.13.2 设置数字选项 129
6.13.3 获取句柄选项 130
6.14 CURLcode返回码 130
6.15 详细操作 130
6.16 libcurl示例 131
6.16.1 获取一个简单的HTML页面 131
6.16.2 获取HTML页面并保存在内存中 132
第 7 章 用libcurl执行HTTP操作 135
7.1 HTTP响应 135
7.1.1 HTTP响应码 135
7.1.2 关于HTTP的“错误”响应码 136
7.2 HTTP请求 136
7.2.1 请求方法 136
7.2.2 自定义HTTP请求标头 137
7.3 HTTP版本 139
7.4 HTTP区间 139
7.4.1 HTTP身份验证 140
7.4.2 用户名和密码 140
7.4.3 要求进行身份验证 140
7.4.4 Basic 140
7.5 在libcurl中处理cookie 141
7.5.1 cookie引擎 141
7.5.2 设置自定义cookie 142
7.5.3 导入和导出 142
7.5.4 cookie文件格式 143
7.6 下载 144
7.6.1 使用libcurl进行HTTP下载 144
7.6.2 同时下载标头 144
7.7 上传 145
7.7.1 HTTP上传 145
7.7.2 HTTP POST 145
7.7.3 HTTP multipart formpost 145
第 8 章 语言绑定 146
猜您喜欢