使用 cURL 发送 POST 请求

亮数据-网络IP代理及全网数据一站式服务商屡获殊荣的代理网络、强大的数据挖掘工具和现成可用的数据集。亮数据:网络数据平台领航者https://www.bright.cn?utm_source=organic-social-cn&utm_campaign=csdn

cURL 是一款用于传输数据的命令行工具,最常见的用途是发送 HTTP 请求。它可以用来向 REST API 发送请求并抓取网页。本文将介绍什么是 cURL POST 请求、如何发送 POST 请求,以及在此过程能使用到的命令行参数。

什么是 POST 请求
安装 cURL
发起 POST 请求

指定 POST 方法
设置 Content-Type
发送数据

发送 JSON 数据
发送 XML 数据
发送 FormData

上传文件
发送凭证

重要的 cURL 参数
结论

什么是 POST 请求

POST 请求是一种被广泛使用的 HTTP 方法,用于向服务器传输数据。

与 GET 请求不同,GET 请求会将数据直接附加在 URL 之后,而 POST 请求会将要传输的数据放在请求正文(body)里。这样更能保护隐私,并且能够传输更多数据,不受浏览器对 URL 长度的限制。

POST 请求通常用于提交表单、上传文件以及向 API 发送 JSON 数据。与 GET 请求相比,它们通常不会被缓存,而且数据也不会显示在浏览器历史中(因为数据位于请求体中)。

安装 cURL

在开始使用 cURL 之前,先检查系统中是否已经安装。可以在终端运行以下命令:

curl --version

如果出现错误提示,说明无法使用 curl 命令,需要先进行安装。

在 Windows 11(通过 WinGet):

winget install curl.curl

在 Windows(通过 Chocolatey):

choco install curl

在 macOS(通过 Homebrew):

brew install curl

在 Ubuntu/Debian Linux:

apt-get install curl

在 Red Hat Enterprise Linux、CentOS 和 Fedora Linux:

yum install curl

如果使用其他 Linux 发行版,请使用相应的原生包管理器(例如 openSUSE 的 zypper 或 Arch 的 pacman)。

发起 POST 请求

指定 POST 方法

在发起 HTTP 请求时,需要指定所用的 HTTP 方法。最常见的方法包括 GET、POST、PUT 和 DELETE。可以使用 -X(或 --request)选项来指定想要使用的方法。

例如,向 https://httpbin.org/anything 发送 POST 请求,可以执行:

curl -X POST https://httpbin.org/anything

httpbin.org 会在响应中回显请求体和请求头,你应当会看到类似以下内容:

{
  "args": {},
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "*/*",
    "Host": "httpbin.org",
    "User-Agent": "curl/8.1.2",
    "X-Amzn-Trace-Id": "Root=1-11111111-111111111111111111111111"
  },
  "json": null,
  "method": "POST",
  "origin": "0.0.0.0",
  "url": "https://httpbin.org/anything"
}

设置 Content-Type

发送 POST 请求时,最好在请求头里指定内容类型(Content-Type),以便服务器正确解析数据。可以通过设置 Content-Type 请求头与正确的 MIME 类型来实现。

例如,如果要在请求体中发送 JSON,则需要将 Content-Type 设置为 application/json,可使用 -H(或 --header)选项:

curl -X POST -H 'Content-Type: application/json' -d '{}' https://httpbin.org/anything

发送数据

-d(或 --data)选项用于在请求体中指定要发送的数据。可以使用字符串形式(加上引号):

curl -X POST -H 'Content-Type: application/json' -d '{
    "FirstName": "Joe", 
    "LastName": "Soap" 
}' https://httpbin.org/anything

如果有一个文件中包含要发送的数据,可以用 @ 前缀加文件名的方式发送:

curl -X POST -H 'Content-Type: application/json' -d @body.json https://httpbin.org/anything
发送 JSON 数据

若要发送 JSON 数据,需要同时设置 Content-Type 和 Accept 请求头为 application/json

curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
    "FirstName": "Joe",
    "LastName": "Soap"
}' https://httpbin.org/anything

cURL 还提供了 --json 选项(7.82 版本后可用),它会自动设置这两个头:

curl -X POST --json '{
    "FirstName": "Joe",
    "LastName": "Soap"
}' https://httpbin.org/anything
发送 XML 数据

若要发送 XML 数据,同样需要正确设置请求头并在请求体中提供 XML:

curl -X POST -H 'Content-Type: application/xml' -H 'Accept: application/xml' -d '<Person>
    <FirstName>Joe</FirstName>
    <LastName>Soap</LastName>
</Person>' https://httpbin.org/anything
发送 FormData

对于表单提交,可以使用 -F(或 --form)选项并附带表单字段名和对应值:

curl -X POST -F FirstName=Joe -F LastName=Soap https://httpbin.org/anything

上传文件

要用 FormData 上传文件,可以在字段值之前加上 @

curl -X POST -F File=@Contract.pdf https://httpbin.org/anything

发送凭证

对于基本(Basic)身份验证,可以使用 -u(或 --user)选项,后跟用户名和密码:

curl -X POST -u 'admin:password123' --json '{
    "FirstName": "Joe",
    "LastName": "Soap"
}' https://httpbin.org/anything

重要的 cURL 参数

参数 完整写法 简要说明
-X –request 指定要使用的 HTTP 方法
-d –data 发送请求体数据
-F –form 发送表单数据
-H –header 设置请求头字段
-i –include 在输出中包含响应头
-v –verbose 显示更多调试信息
-L –location 自动跟随重定向
-o –output 将响应输出写入文件
-O –remote-name 以远程文件名保存
-C –continue-at 从指定偏移继续传输
-u –user 设置基本身份验证凭据
-x –proxy 使用指定的代理服务器
-k –insecure 跳过 SSL 证书检查
-I –head 仅获取响应头(HEAD 方法)
-b –cookie 发送存储的 Cookie 数据
-c –cookie-jar 将 Cookie 写入文件
-e –referer 设置 Referer 请求头
-A –user-agent 设置自定义 User-Agent
-m –max-time 请求的最长时限
–max-filesize (无短选项) 限制下载文件大小
-z –time-cond 按修改时间下载
–compressed (无短选项) 请求压缩响应
–data-urlencode (无短选项) 对数据进行 URL 编码
–interface (无短选项) 绑定到指定网络接口
-w –write-out 输出自定义响应信息
-r –range 请求指定的字节范围
-s –silent 隐藏进度输出
-f –fail 在出错时静默退出
-g –globoff 禁用花括号扩展
–http1.0 (无短选项) 使用 HTTP/1.0 协议
–http1.1 (无短选项) 使用 HTTP/1.1 协议
–http2 (无短选项) 使用 HTTP/2 协议
–http3 (无短选项) 使用 HTTP/3 协议
-Z –parallel 并行发送请求
–proxy-user (无短选项) 为代理服务器设置身份验证
–digest (无短选项) 使用 HTTP Digest 身份验证
–ntlm (无短选项) 使用 HTTP NTLM 身份验证
–negotiate (无短选项) 使用 SPNEGO/Kerberos 身份验证

结论

cURL 还有很多额外功能值得探索,例如使用变量、发送 Cookies 以及与代理服务配合使用。若想在进行自动化 HTTP 请求时隐藏真实 IP,可以考虑使用 Bright Data 的代理服务 来隐藏 IP 地址。立即创建一个免费的 Bright Data 账号,测试其代理与抓取解决方案吧!

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容