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

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

[复制链接]
我来看看 发表于 2023-03-17 17:35:22 | 显示全部楼层 |阅读模式
# E7 c7 f! b4 F5 v9 {5 s0 D

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

0 a2 F3 P6 i; @( u

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。

) \5 v1 w) h( W8 e) P4 s& M: O

查看 cURL 源代码可以访问官方 Github如果安装 cURL 呢?ubuntu / Debian.sudo apt install curl 4 C6 W- R6 Y4 O+ Q0 j- K CentOS / Fedora.sudo yum install curl: p6 Y2 C* P) N, [6 r! q F: g

* K$ Y6 H" d" |% w& |; T1 W5 X/ i

Windows.如果你已经安装了 Git,那么 Git Bash 自带 cURL . 如果作为开发者你 git 都没有,那么只能官方手动下载1. 请求源码直接 curl $ curl http://wttr.in/ # ]# V8 D. s2 y) C2 Y+ Y( t

r0 k- P$ \) z) M

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

4 D3 H" g4 b& T5 Q0 }

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

# ?# ?$ ^% B/ S4 f n- {

-O自定使用 url 中的文件名$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README , G' h1 k7 \/ x % Total % Received % Xferd Average Speed Time Time Time Current& g: n; G& n4 S+ K4 _" Q Dload Upload Total Spent Left Speed , v5 I7 j+ ]. Z, ^3 c8 Z 100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 19399 E$ {: |$ }' `3 }& \

G& {$ C/ c0 N J- {

下载文件会显示下载状态,如数据量大小、传输速度、剩余时间等可以使用 -s 参数禁用进度表$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README# g# J$ k9 M# X1 V$ h % Total % Received % Xferd Average Speed Time Time Time Current % o2 [. o2 y& u Dload Upload Total Spent Left Speed 0 d0 @! H" v( R: Z9 x+ U 100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 1939 + `1 A; @: M4 H: c) N- j $ ) m) @ m* U' f* j3 G $ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README -s ) ?8 w* |7 A+ J8 p# @# T

$ l! o7 k3 P1 g' H8 m1 u/ k" o* J) P, i

也可以使用 --process-bar 参数让进度表显示为进度条$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README --progress-bar 5 q3 G% [- @: R5 w! I. u: I ########################################################################################## 100.0%$ M5 X/ P3 b2 W& y

9 b- x3 T6 z. c# S3 Z

cURL 作为强大的代名词,断点续传自然手到擒来,使用 -C - 参数即可下面是断点续传下载 ubuntu20.04 镜像的例子$ curl -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar / I; w2 u! r7 I3 n7 T: M ## 1.7%. ]7 S7 I, T! f5 i ^C( O' D5 r2 `3 q+ S2 o $ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar # a) Q+ V' h5 | ### 2.4% . Z5 N; L, e' d! m6 y6 P; q ^C 8 ?. l+ \2 |) @" C) x $ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar3 _' i) ^1 J# ]+ Z4 g6 L ### 2.7%9 o; n; p8 I- M! z, w; a ^C3 D; k; X& p( @- ?4 K% w $& \ x$ }' f ?4 c+ v, k

: m, r- O1 A/ c* }! ]0 G

什么?下载时不想占用太多网速?使用 --limit-rate 限个速吧curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --limit-rate 100k ! F# R, h7 i6 A

$ B8 d5 e8 s. ~9 I6 G

什么?你又要从 FTP 服务器下载文件了?不慌curl -u user:password -O ftp://ftp_server/path/to/file/, @( o8 z" r3 {4 @3 Q. ^1 O 3. Response Headers使用

" T, _0 U0 Q' e1 d0 c4 Q2 M

-i 参数显示 Response Headers 信息使用 -I 可以只显示 Response Headers 信息$ curl -I http://wttr.in7 o1 ]- M @5 y( t( v3 z HTTP/1.1 200 OK ) ^1 U4 c0 c) _ P% X Server: nginx/1.10.3( i: O: X" \; N1 v+ ]2 a6 [ Date: Sat, 30 May 2020 09:57:03 GMT % c' L9 }/ E; U$ a0 X+ n Content-Type: text/plain; charset=utf-87 H9 J. H* \9 Y7 x" Y7 b& W: W Content-Length: 86782 P: D- }# B* F4 y1 o1 k: o# f Connection: keep-alive ( `7 K! k3 R; q! k& b* v% A3 ` Access-Control-Allow-Origin: *. A1 [8 C* S. c! k$ |

$ [: p7 F% j% a

4. 请求方式(GET/POST/...)使用 -X 轻松更改请求方式$ curl -X GET http://wttr.in9 l" W* o2 b" [$ W: ?) u8 T $ curl -X POST http://wttr.in $ I% T8 L$ i! u, x, o; p' ` $ curl -X PUT http://wttr.in: C' P' Z, e+ |1 Y7 s% p! ]+ { ...# m/ I5 ?% T6 n( b8 k0 H9 z f

! v, ^' G2 |3 W0 L) y2 r j6 {

5. 请求参数以传入参数 name 值为 未读代码 为例Get 方式参数直接url拼接参数$ curl -X GET http://wttr.in?name=未读代码 # h# E S1 h! [ j, N Post 方式使用 --data。

3 `- l, O1 r2 Q

设置参数$ curl -X POST --data "name=未读代码" http://wttr.in % j0 Y3 h( y( X* o1 @+ r 请求时也可以自定义 header 参数,使用 --harder 添加$ curl --header "Content-Type:application/json" http://wttr.in # N+ H0 v( Y; m. v6 ^/ n1 U

1 n1 l) l$ D% o- h

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

0 f! p% \+ ?- T

-D 则是 Content-Type : application/x-www-form-urlencoded.比如上传一个 protrait.jpg 图片$ curl -F profile=@portrait.jpg https://example.com/upload 9 T" R8 D% m% L1 u; I

+ E6 x1 a# C, h7 m% d

提交一个具有 name 和 age 参数的 form 表单curl -F name=Darcy -F age=18 https://example.com/upload! x) p$ ~' @* D( t1 G6 x6 { 参数对应的内容也可以从文件中读取。

9 m, `) y5 u) d

curl -F "content=<达西的身世.txt" https://example.com/upload / ^2 W4 X) P0 p- ^7 v/ M! J& o 上传时同时指定内容类型curl -F "content=<达西的身世.txt;type=text/html" https://example.com/upload1 u1 F4 G9 I# M0 F$ M w h

7 |! {. s1 _* D4 w7 O: ]

上传文件的和其他参数一起curl -F file=@"localfile";filename="nameinpost" example.com/upload8 K) M& z% D! _* l+ | b! {, O+ D 7. 网址通配cURL 可以实现多个网址的匹配,你可以使用 。

( t1 |/ u" K$ b! R9 W

{} 结合逗号分割来标识使用 url 中的某一段,也可以使用 [] 来表示范围参数# 请求 www.baidu.com 和 pan.baidu.com 和 fanyi.baidu.com" \. G; }7 ~+ Q. k# X4 P6 F $ curl http://{www,pan,fanyi}.baidu.com' p W( H, V" Q$ k # 虚构网址1-10开头的baidu.com,然后请求2 z. }. o5 x! F) _ L. Y $ curl http://[1-10].baidu.com 6 ^1 v Y3 t( Q4 t # 虚构网址a-z开头的baidu.com,然后请求 4 ~( d4 r9 s. Q8 x. _; _5 y* g! e $ curl http://[a-z].baidu.com# P( G: q( H, ]' K, R/ N/ ?1 j

# x% F& r8 o! b/ v* Q2 W

这种方式有时候还是很有用处的,比如说你发现了某个网站的 url 规律8. 使用 cookie请求时使用 -c 参数存储响应的 cookie,使用 -b 可以在请求时带上指定 cookie.$ curl -c wdbyte_cookies http://www.wdbyte.com: l$ q6 T9 ]; K5 [1 k $ curl -b wdbyte_cookes http://www.wdbyte.com 3 k6 {5 v+ M0 f: x0 D6 E

8 B* O7 E4 R) @' B5 v% v. q

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

; S. `8 w. M' f& b

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

# B) b* a# n4 z# s g

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

+ @9 o8 b# J; X$ q " B8 l: P0 K1 C4 K* {/ { \0 W5 p" R 3 i k6 l6 o8 X3 Q' F2 | . ]8 R) w$ A& @0 I" W# Y
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-7-8 17:20 , Processed in 0.032521 second(s), 25 queries , Gzip On.

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

    Powered by Discuz! X3.5

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