您现在的位置是:知识 >>正文

curl 携带post请求

知识2人已围观

简介 curl 携带post请求 curl 是命令行里的瑞士军刀,POST 请求则是它最常用的功能之一。别管你是调试 API 还是爬数据,绕不开这行命令。 最基础的用法长这样:curl -X POST h ...

curl 携带post请求

curl 是携带命令行里的瑞士军刀,POST 请求则是请求它最常用的功能之一。别管你是携带调试 API 还是爬数据,绕不开这行命令。请求

最基础的携带用法长这样:curl -X POST https://api.example.com/login。但光这样发出去,请求服务器大概率回你一个 400——因为你啥数据都没带。携带POST 的请求核心是请求体,你得告诉服务器你想干什么。携带

带表单数据

最常见的请求场景是模拟网页表单提交。用 -d 参数,携带curl 会自动把内容编码成 application/x-www-form-urlencoded 格式:

curl -d "username=admin&password=123456" https://api.example.com/login

注意,请求这里 -X POST 可以省略。携带因为一旦你用了 -d,请求curl 默认就会发 POST 请求。携带我见过不少新手多写个 -X POST,倒也没错,就是冗余。真正要注意的是,-d 里的数据如果有特殊字符(比如 & 或空格),得先 URL 编码,否则服务器会解析错乱。

发 JSON 数据

现在接口基本都是 JSON 格式了。你得手动指定 Content-Type 头,不然服务器可能不认:

curl -H "Content-Type: application/json" -d '{ "name":"张三","age":30}' https://api.example.com/users

有个坑:单引号里如果包含单引号,得用双引号转义,或者干脆反过来。我习惯外层用单引号,内层 JSON 用双引号,最省事。要是 JSON 特别长,写成一行看着费劲,可以用 --data @file.json 从文件读取,既清晰又避免转义问题。

文件上传

POST 不光是发文本。传文件用 -F 参数,它会自动设置成 multipart/form-data 格式:

curl -F "file=@/path/to/photo.jpg" -F "caption=海边日落" https://api.example.com/upload

这个 @ 符号是关键,它告诉 curl 后面是文件路径,不是普通字符串。如果你要同时传多个文件,写多个 -F 就行。注意,文件路径里如果有空格,得用引号包住整个 @ 部分。

调试 POST 请求

最烦人的是请求发出去了,服务器返回 500,但你又不知道错在哪。这时候加 -v 参数,curl 会把整个请求头和响应头都打印出来:

curl -v -H "Content-Type: application/json" -d '{ "key":"value"}' https://api.example.com/test

输出里你能看到实际发送的 HTTP 报文,连 Host、User-Agent 都一目了然。如果嫌 -v 输出太啰嗦,用 -w "\n%{ http_code}" 只显示状态码,适合写脚本时判断成功失败。

还有个实用技巧:用 --trace-ascii - 把整个通信过程以 ASCII 格式打印,比 -v 更详细,能看到二进制内容(比如文件上传时的 boundary 分隔符)。调试某些诡异问题时,这招能救命。

带 Cookie 和 Header

很多接口要求登录态。先发一个 POST 拿 Cookie,再用 -c 保存到文件,后续请求用 -b 带上:

curl -c cookies.txt -d "user=admin&pass=123" https://api.example.com/login curl -b cookies.txt https://api.example.com/profile

有些接口需要自定义 Header,比如签名验证。用 -H 可以叠加多个:

curl -H "Authorization: Bearer token123" -H "X-Request-ID: abc123" -d '{ }' https://api.example.com/data

最后提个醒:-d 和 -F 不能混用。混了的话 curl 会报错,或者你得到的行为完全不符合预期。要发混合数据(既有文本字段又有文件),全用 -F,文本字段不带 @ 即可。

curl 的 POST 就这点事儿。记不住参数没关系,多用几次自然就顺了。真到了生产环境,建议先拿 --dry-run 看看生成的请求长啥样,再实际发送——这参数不发送数据,只打印将发送的内容,省得手滑把测试数据写进生产库。

Tags:

相关文章

  • web应用安全测试

    知识

    Web应用安全测试:别等被薅秃了才补墙 上个月,一家做在线教育的创业公司找我做应急响应。他们的课程兑换码接口被脚本刷了三天,凌晨四点攻击者用自动化工具遍历出两万多个有效码,挂闲鱼五毛一个甩卖。CTO在 ...

    【知识】

    阅读更多
  • 缅甸电信诈骗真实故事

    知识

    老张被铐在铁椅子上时,才看清对面那排电脑屏幕上的聊天记录。那是他自己的账号,正用他的语气跟家里人说“这边工程款结了,下个月就回国”。他喉咙发干,想喊,但旁边那个拿电棍的缅甸人只是抬了抬下巴,示意他看墙 ...

    【知识】

    阅读更多
  • 免费网页封装app工具

    知识

    手机里装了十几个app,一半其实只是网页套壳。别急着反驳,你打开银行app、购物app、甚至某些“原生感”极强的小工具,仔细看看加载时的白屏和顶部那个假状态栏——八成都是网页封装的。这事儿不丢人,反而 ...

    【知识】

    阅读更多


友情链接