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

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

[复制链接]
我来看看 发表于 2023-03-17 17:35:22 | 显示全部楼层 |阅读模式
" P7 k" m4 G3 ~0 x) o7 c$ p" ]

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

& V9 ]" z7 p: `, p- k* q/ ~3 ~

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。

# b* y# X6 m# _) P% |, P

查看 cURL 源代码可以访问官方 Github如果安装 cURL 呢?ubuntu / Debian.sudo apt install curl ) p5 j3 Z8 E# b$ g: o CentOS / Fedora.sudo yum install curl , s3 C& P( |1 o: P! Z% F

) x! w/ a5 p- ~2 _) f

Windows.如果你已经安装了 Git,那么 Git Bash 自带 cURL . 如果作为开发者你 git 都没有,那么只能官方手动下载1. 请求源码直接 curl $ curl http://wttr.in/" S/ U# Q- s! x% o% U& D

1 O0 X% }/ N+ Q# A Q8 L' R1 @1 m0 k* B

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

7 Y: F" j, [/ J; u& x9 W

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

a3 b, z9 G& A% w8 T. W2 I

-O自定使用 url 中的文件名$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README: t8 G4 U) }$ I9 f % Total % Received % Xferd Average Speed Time Time Time Current ( Y5 X+ v/ o( k8 I) z Dload Upload Total Spent Left Speed& |& J( r" |2 L$ n: q* ]% b$ `% [ 100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 1939- y8 a2 A/ u! W3 F8 r: {3 `. y

3 j$ J5 n& L# d" `- T9 N" {1 {

下载文件会显示下载状态,如数据量大小、传输速度、剩余时间等可以使用 -s 参数禁用进度表$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README) P) a" u& _# I1 {7 ` % Total % Received % Xferd Average Speed Time Time Time Current 2 a, {! p) {: [# x* c1 n Dload Upload Total Spent Left Speed . z7 |- Y# Y! s: J: m6 w5 a2 W 100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 1939* Z- t% t! w8 L; r $ / |6 Z4 G) f% B( w; a $ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README -s + @! L, _5 Q7 n% C

) `6 ~4 h4 g" m# ?) e

也可以使用 --process-bar 参数让进度表显示为进度条$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README --progress-bar 8 W# }2 H1 X, i; U; i. f0 G& y ########################################################################################## 100.0% 0 H$ g+ ?" j9 ~1 U

* m+ _; |1 q; n8 Z ~

cURL 作为强大的代名词,断点续传自然手到擒来,使用 -C - 参数即可下面是断点续传下载 ubuntu20.04 镜像的例子$ curl -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar' x5 P! P9 E+ P5 r$ J$ G ## 1.7%- o6 n! p& D0 j" g, n ^C . k) M, i+ v" x8 U# Y4 g $ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar& g$ N: o; a2 @( p. N ### 2.4% 0 [$ K/ X) ?/ Q# m! ?8 l [ ^ ^C e( u. R7 h) W1 q- j+ r $ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar" l* ] T! C; S# R1 u ### 2.7% . Y, L# a c, m* F1 n ^C ) Z$ Z; d6 Y$ t5 {$ @0 C2 J $4 S8 I5 G4 k. d1 s" l

2 ?* c5 M9 f; Z2 k/ g

什么?下载时不想占用太多网速?使用 --limit-rate 限个速吧curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --limit-rate 100k - q9 d& q3 H- l4 \0 B$ S3 k

1 {# l& p7 f/ ?

什么?你又要从 FTP 服务器下载文件了?不慌curl -u user:password -O ftp://ftp_server/path/to/file/$ Z" ^4 Y7 |) N7 k$ ^5 U 3. Response Headers使用

4 T/ C9 {. h% e; Y

-i 参数显示 Response Headers 信息使用 -I 可以只显示 Response Headers 信息$ curl -I http://wttr.in2 O- ^; N; E- d HTTP/1.1 200 OK" C" W( R# T, d; @% } m3 U Server: nginx/1.10.3' w, H" U- s" B4 L Date: Sat, 30 May 2020 09:57:03 GMT 8 H. R6 S/ ?/ C8 A; d v) X4 Y Content-Type: text/plain; charset=utf-8/ G7 X& k! j" |6 t" } Content-Length: 8678 . t8 e6 K* [& \* J Connection: keep-alive- L7 M2 o% G0 D* B v( }9 ` Access-Control-Allow-Origin: * ( h5 k1 Y F( A1 d2 q; k/ n

# k }' j( ~; T

4. 请求方式(GET/POST/...)使用 -X 轻松更改请求方式$ curl -X GET http://wttr.in7 G+ y3 y0 x- M" f e6 h $ curl -X POST http://wttr.in/ |( K0 I/ A: M+ g' Z/ d5 D! ~, V $ curl -X PUT http://wttr.in+ K0 q$ x, o5 A% }0 G ... # P' j6 h/ @% m7 t r9 F& r4 U

! x1 _9 _& x! Z5 m* T

5. 请求参数以传入参数 name 值为 未读代码 为例Get 方式参数直接url拼接参数$ curl -X GET http://wttr.in?name=未读代码# J- A4 ]6 l( ]$ ~ Post 方式使用 --data。

5 O; @0 C( G }) A3 {1 Y( l

设置参数$ curl -X POST --data "name=未读代码" http://wttr.in . Q& Y+ }) Q& s9 B& w& ~ 请求时也可以自定义 header 参数,使用 --harder 添加$ curl --header "Content-Type:application/json" http://wttr.in) k, S& l: g/ u7 p2 s. R- d8 }

* P: V. K8 U! Z, G

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

; Y9 b) A6 R: |4 y, t, N

-D 则是 Content-Type : application/x-www-form-urlencoded.比如上传一个 protrait.jpg 图片$ curl -F profile=@portrait.jpg https://example.com/upload , g* ~3 [) t. ?' j+ ~

/ T. Q1 `) B# q" s7 h

提交一个具有 name 和 age 参数的 form 表单curl -F name=Darcy -F age=18 https://example.com/upload1 m" u" w- }8 S# i2 `! m: d 参数对应的内容也可以从文件中读取。

4 i' N0 P) s$ L$ O

curl -F "content=<达西的身世.txt" https://example.com/upload : Z/ z8 T& V6 a/ g 上传时同时指定内容类型curl -F "content=<达西的身世.txt;type=text/html" https://example.com/upload 8 D5 m6 D- g, [. H- N

. q$ G$ Y' i% x4 M" g

上传文件的和其他参数一起curl -F file=@"localfile";filename="nameinpost" example.com/upload, x$ z! w) Z; F7 e/ Q" K5 y 7. 网址通配cURL 可以实现多个网址的匹配,你可以使用 。

) R4 k. R% `5 d D! a* W. f7 }

{} 结合逗号分割来标识使用 url 中的某一段,也可以使用 [] 来表示范围参数# 请求 www.baidu.com 和 pan.baidu.com 和 fanyi.baidu.com7 E& T6 ]0 G7 R) Y9 h $ curl http://{www,pan,fanyi}.baidu.com x9 T: _! g1 s8 j # 虚构网址1-10开头的baidu.com,然后请求( b/ R: i6 p8 U- z& I $ curl http://[1-10].baidu.com* I& e# K2 _( P% j& S9 |, j w # 虚构网址a-z开头的baidu.com,然后请求2 U, a4 o& _0 V+ _& i $ curl http://[a-z].baidu.com' X( O' r e% F C

% v6 q/ \5 l( M* s( t# k

这种方式有时候还是很有用处的,比如说你发现了某个网站的 url 规律8. 使用 cookie请求时使用 -c 参数存储响应的 cookie,使用 -b 可以在请求时带上指定 cookie.$ curl -c wdbyte_cookies http://www.wdbyte.com / L) ^" B- s$ Z7 I0 L $ curl -b wdbyte_cookes http://www.wdbyte.com 8 _3 K% m1 D- W, b

/ N& P: K: V+ y5 b9 f

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

/ S* j/ F- r/ M

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

3 `0 N' `8 q/ \7 |

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

' _: q l9 [6 X6 d2 i; X# \ % a7 X; [ O+ l! Y. p0 i 9 j" B) G" y6 D3 [5 A# Y2 u% [& o) {6 W- ^+ X. A* u) W. N u! a 6 a7 R! F. L/ O! `- u) [( K
回复

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-4-4 08:20 , Processed in 0.078600 second(s), 22 queries , Gzip On.

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

    Powered by Discuz! X3.5

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