找回密码
 加入怎通
查看: 186|回复: 0

可以Postman,也可以cURL.进来领略下cURL的独门绝技(curl发送post请求返回500)

[复制链接]
我来看看 发表于 2023-03-17 17:35:22 | 显示全部楼层 |阅读模式
+ f6 \0 Y, j. }# }7 G

文章已经收录在 Github.com/niumoo/JavaNotes ,更有 Java 程序员所需要掌握的核心知识,欢迎Star和指教。 欢迎关注我的公众号,文章每周更新。

; G* u# Z: _7 x- N ?6 G( {* m

cURL 是一个开源免费项目,主要是命令行工具 cURL 和 libcurl,cURL 可以处理任何网络传输协议,但是不涉及任何具体的数据处理cURL 支持的通信协议非常丰富,如 DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,MQTT,POP3,POP3S,RTMP, RTMPS,RTSP,SCP,SFTP,SMB,SMBS,SMTP,SMTPS,TELNET 以及 TFTP。

1 X6 Q) f R/ X- [

查看 cURL 源代码可以访问官方 Github如果安装 cURL 呢?ubuntu / Debian.sudo apt install curl# V& Z( _0 b' T$ m) u# D! \ CentOS / Fedora.sudo yum install curl ' z' u" {- r/ M8 F4 `9 o9 } 。

5 K$ d" u% i2 F7 v; k" p# ?

Windows.如果你已经安装了 Git,那么 Git Bash 自带 cURL . 如果作为开发者你 git 都没有,那么只能官方手动下载1. 请求源码直接 curl $ curl http://wttr.in/ - U4 K& |" U1 a( X 。

5 g+ x* E: j, J4 Y

上面请求的示例网址是一个天气网站,很有意思,会根据你的请求 ip 信息返回你所在位置的天气情况。

- R& I6 ]8 X- o/ |- F

写这篇文字时我所在的上海正在下雨,窗外飘雨无休无止2. 文件下载使用 -o 保存文件,类似于 wget 命令,比如下载 README 文本保存为 readme.txt 文件如果你需要自定义文件名,可以使用 。

: {5 l9 W* r1 O' J" ^

-O自定使用 url 中的文件名$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README 3 A( L3 u5 u9 U& \/ Z % Total % Received % Xferd Average Speed Time Time Time Current# f. @, c& O9 H V Dload Upload Total Spent Left Speed , j! X' e) |7 ?6 f1 c/ P: e 100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 1939! D1 v" ?* `: h: a! a 。

/ T6 v8 p# H/ n! w# D% u E

下载文件会显示下载状态,如数据量大小、传输速度、剩余时间等可以使用 -s 参数禁用进度表$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README5 X- V# j& u6 b % Total % Received % Xferd Average Speed Time Time Time Current1 t5 `+ X, A7 ~$ ^3 j. e! b; | Dload Upload Total Spent Left Speed9 o- S% ?2 l( x" _4 k 100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 19395 X" `( E* H0 Q$ c $ 8 G& R. v U; U3 w0 }3 g/ D9 z7 @ $ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README -s4 ] ^0 k* h- g' w8 x/ r 。

: D: e: w( A1 c2 f/ Y& L5 w. O' R [

也可以使用 --process-bar 参数让进度表显示为进度条$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README --progress-bar: a. D) k. ?* [2 O: ?# y ########################################################################################## 100.0%: t3 _' j/ }5 D' ? 。

) A# J/ x! }! F2 c

cURL 作为强大的代名词,断点续传自然手到擒来,使用 -C - 参数即可下面是断点续传下载 ubuntu20.04 镜像的例子$ curl -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar / r- K) s+ ]9 }) U- O8 R; k0 ` ## 1.7%3 t) g: D! p- F/ k3 M- @ ^C ! U2 Z+ Q9 X3 o2 `/ ] $ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar ) [! t9 a3 p4 }- k5 R% L ### 2.4%- _) H% [$ Y, e ^C 0 ^" K8 i8 C2 q6 \ C' L; ~) _+ } $ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar & L9 ?; j9 S. E2 H& h2 t" L$ `9 U ### 2.7%: C, o/ y; [' E& O. C4 d" g6 X ^C! E( A2 |/ [% P; j $+ }2 Y& o6 p( T- J" b- q" T; X 。

d* ]$ W5 g2 [- a3 j

什么?下载时不想占用太多网速?使用 --limit-rate 限个速吧curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --limit-rate 100k( C3 l4 @1 D' @ 。

/ N* G5 f1 e8 c& q P/ G5 i

什么?你又要从 FTP 服务器下载文件了?不慌curl -u user:password -O ftp://ftp_server/path/to/file/& y3 J# v6 I, S& m3 |. T+ k 3. Response Headers使用

. I s" ^- h2 Q2 ?* g! W

-i 参数显示 Response Headers 信息使用 -I 可以只显示 Response Headers 信息$ curl -I http://wttr.in" K' V6 L3 D$ Z! ~; m+ K# J HTTP/1.1 200 OK ) |2 V% S( q( z, c Server: nginx/1.10.36 W8 S* x1 Y# K2 H& Y& N: U* y% x Date: Sat, 30 May 2020 09:57:03 GMT 7 R) D- h% P2 B. [ Content-Type: text/plain; charset=utf-8 / _/ P' {0 C( ?7 r i: s5 X6 U Content-Length: 8678 2 a+ i) ~2 j0 D: }" p Connection: keep-alive. h+ w! X, y+ D7 L Access-Control-Allow-Origin: *, M% _- d0 G8 t% I1 r* B3 N7 b 。

) j- p$ z0 W$ V4 _" X9 N5 G

4. 请求方式(GET/POST/...)使用 -X 轻松更改请求方式$ curl -X GET http://wttr.in + @% L- u4 g; k9 b- A2 Q6 K4 q $ curl -X POST http://wttr.in # u) a" w5 t* x- Q. D; J9 L! B; h; I $ curl -X PUT http://wttr.in 4 C) I5 o) B2 _- U ...% Z5 ^* X3 O0 X; d5 V2 N8 B' H 。

8 D' r, L3 c6 J5 |7 }4 S% f

5. 请求参数以传入参数 name 值为 未读代码 为例Get 方式参数直接url拼接参数$ curl -X GET http://wttr.in?name=未读代码/ e: h/ o w& G" m Post 方式使用 --data。

; M- H, B) h: k

设置参数$ curl -X POST --data "name=未读代码" http://wttr.in3 E1 l, `6 f0 n 请求时也可以自定义 header 参数,使用 --harder 添加$ curl --header "Content-Type:application/json" http://wttr.in 9 p% Q/ j* U$ i6 S 。

; c' i- b0 a1 `/ e9 U9 u4 E+ C

6. 文件上传cURL 的强大远不止此,表单提交,上传文件内容也不在话下,只需要使用 -F 或者 -D参数,-F 会自动加上请求头 Content-Type: multipart/form-data ,而

1 w' c0 ~1 B/ q( m( \- `2 t5 o! Y

-D 则是 Content-Type : application/x-www-form-urlencoded.比如上传一个 protrait.jpg 图片$ curl -F profile=@portrait.jpg https://example.com/upload 3 L e. ]! x# |9 P( W 。

5 W8 v/ y! s6 ~0 | u# b' P

提交一个具有 name 和 age 参数的 form 表单curl -F name=Darcy -F age=18 https://example.com/upload 0 D- X# s3 `9 F i" w0 y/ d 参数对应的内容也可以从文件中读取。

8 D% x- Y8 w9 t$ F" R$ d& W

curl -F "content=<达西的身世.txt" https://example.com/upload % u8 J% L$ X. [, X4 L; { 上传时同时指定内容类型curl -F "content=<达西的身世.txt;type=text/html" https://example.com/upload % l$ F; } c9 U% q 。

" ?8 b1 e" u( @# s

上传文件的和其他参数一起curl -F file=@"localfile";filename="nameinpost" example.com/upload* K% s+ N1 M3 r) W8 c2 I7 n 7. 网址通配cURL 可以实现多个网址的匹配,你可以使用 。

9 I' a T- j( _! \7 |+ R

{} 结合逗号分割来标识使用 url 中的某一段,也可以使用 [] 来表示范围参数# 请求 www.baidu.com 和 pan.baidu.com 和 fanyi.baidu.com2 z, J7 F0 Q# B. U) ]( `0 b $ curl http://{www,pan,fanyi}.baidu.com " f4 u5 M* M4 T0 I% g # 虚构网址1-10开头的baidu.com,然后请求# U/ H& o; @$ _8 m $ curl http://[1-10].baidu.com ! w) w3 J0 F2 ]0 h # 虚构网址a-z开头的baidu.com,然后请求3 D4 I8 v, t2 X+ y; b! g $ curl http://[a-z].baidu.com + U8 y4 L3 _ q z2 L 。

5 [- z) Z& F. ^

这种方式有时候还是很有用处的,比如说你发现了某个网站的 url 规律8. 使用 cookie请求时使用 -c 参数存储响应的 cookie,使用 -b 可以在请求时带上指定 cookie.$ curl -c wdbyte_cookies http://www.wdbyte.com - o. J- X) A! b* j+ X2 L. z $ curl -b wdbyte_cookes http://www.wdbyte.com/ B- K: M9 {3 j+ t+ R4 B 。

4 s) g$ d/ }2 n* M

总结以上就是 cURL 的常见用法了,最后告诉你一个小技巧,Chrome、Firefox 等浏览器可以直接拷贝请求为 cURL 语句。保存之后下次请求测试非常方便。

4 l$ s4 N, |. D, K' \* J) ]. ~( N' H

参考资料https://curl.haxx.se/docs/manpage.html最后的话 文章已经收录在 Github.com/niumoo/JavaNotes ,欢迎Star和指教更有一线大厂面试点,Java程序员需要掌握的核心知识等文章,也整理了很多我的文字,欢迎 。

# @: f* t" M$ Z9 \: f X% R

Star 和完善,希望我们一起变得优秀。文章有帮助可以点个「赞」或「分享」,都是支持,我都喜欢! 文章每周持续更新,要实时关注我更新的文章以及分享的干货,可以关注「 程序猿阿朗」公众号或者我的博客。

9 ?; e. j4 J% Q! Q ( w4 d6 t! N$ q3 R5 i % m& @' B9 F# p4 R1 |- {8 A" U3 F0 Q6 L- q& o; j * U3 |* b1 ] _ g. W8 O

暂时无法加载帖子列表

回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 加入怎通

    本版积分规则

    QQ|手机版|小黑屋|网站地图|真牛社区 ( 苏ICP备2023040716号-2 )

    GMT+8, 2026-10-1 11:32 , Processed in 0.035725 second(s), 25 queries , Gzip On.

    免责声明:本站信息来自互联网,本站不对其内容真实性负责,如有侵权等情况请联系420897364#qq.com(把#换成@)删除。

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表