简单介绍shell中的curl网络请求的实现

Posted wx5a20cf699eb6f

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单介绍shell中的curl网络请求的实现相关的知识,希望对你有一定的参考价值。

本文主要介绍了​​shell​​中的curl网络请求的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

shell中的curl网络请求的实现

curl 是利用URL语法在​​命令​​行下工作的文件传输工具,1997年首次发行,支持文件上传和下载,结合shell​​脚本​​体验更棒。但按照传统习惯称 curl 为下载工具。

curl 支持的通信协议有 有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP 等等,支持的平台有 ​​Linux​​、MacOSX、Darwin、Windows、DOS、FreeBSD等等。

一、curl的作用:

1、查看网页源码

denglibingdeMacBook-Pro-4: curl www.baidu.com

< !DOCTYPE html>
< !--STATUS OK-->< html> < meta content=always name=referrer>< link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css>< title>百度一下,你就知道 < body link=#0000cc> < div id=wrapper> < div id=head> < div class=head_wrapper> < div class=s_form> < div class=s_form_wrapper> < div id=lg> < img hidefocus=true src= //www.baidu.com/img/bd_logo1.png width=270 height=129> < form id=form name=f action=//www.baidu.com/s class=fm> < input type=hidden name=bdorz_come value=1> < input type=hidden name=ie value=utf-8> < input type=hidden name=f value=8> < input type=hidden name=rsv_bp value=1> < input type=hidden name=rsv_idx value=1> < input type=hidden name=tn value=baidu>< span class="bg s_ipt_wr">< input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus>< span class="bg s_btn_wr">< input type=submit id=su value=百度一下 class="bg s_btn"> < a href=http://news.baidu.com name=tj_trnews class=mnav>新闻 < a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123 < a href=http://map.baidu.com name=tj_trmap class=mnav>地图 < a href=http://v.baidu.com name=tj_trvideo class=mnav>视频 < a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧 < noscript> < a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录 < script>document.write(< a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=+ encodeURIComponent(window.location.href+ (window.location.search === " rel="external nofollow" " ? "?" : "&")+ "bdorz_come=1")+ " name="tj_login" class="lb">登录); < a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多产品 < div id=ftCon> < div id=ftConw> < a href=http://home.baidu.com>关于百度 < a href=http://ir.baidu.com>About Baidu < p id=cp>©2017 Baidu < a href=http://www.baidu.com/duty/>使用百度前必读 < a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈 京ICP证030173号 < img src=//www.baidu.com/img/gs.gif>

// 保存整个网页,使用 -o 处理
denglibingdeMacBook-Pro-4: curl -o baidu www.baidu.com
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2381 100 2381 0 0 77899 0 --:--:-- --:--:-- --:--:-- 79366

2、查看头信息

denglibingdeMacBook-Pro-4: denglibing$ curl -i www.baidu.com
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Mon, 03 Jul 2017 09:12:17 GMT
Content-Type: text/html
Content-Length: 2381
Last-Modified: Mon, 23 Jan 2017 13:28:11 GMT
Connection: Keep-Alive
ETag: "588604eb-94d"
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
Accept-Ranges: bytes
...
...
...

3、发送网络请求信息

GET方式请求:

curl example.com/form.cgi?data=xxx  如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地

POST方式请求:

//数据和网址分开,需要使用 --data 或者 -d 参数; curl默认使用GET,使用 -X 参数可以支持其他动词, 更多的参数使用 man curl 查看
$ curl -X POST --data "data=xxx" example.com/form.cgi

// --user-agent 字段,表表面客户端的设备信息:
$ curl --user-agent "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89/mideaConnect MissonWebKit/4021/zh-Hans (AppStore) (4347701760)" http://www.example.com

//使用 --cookie 参数,可以让curl发送cookie
$ curl --cookie "name=xxx" www.example.com

//添加头信息,自行增加一个头信息。--header 或者 -H 参数就可以起到这个作用
$ curl --header "Content-Type:application/json" http://example.com


//提交文件作为请求信息 使用 @文件名 请求
$ curl -X POST -H "Content-Type: text/xml" -d @denglibing.txt http://example.com

//denglibing.txt:
11622695,D58C6A25-C683-47D6-A18C-B7741284F632

二、实例

denglibingdeMacBook-Pro-4:~ denglibing$ curl https://api.github.com/users
[

"login": "mojombo",
"id": 1,
"avatar_url": "https://avatars3.githubusercontent.com/u/1?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/mojombo",
"html_url": "https://github.com/mojombo",
"followers_url": "https://api.github.com/users/mojombo/followers",
"following_url": "https://api.github.com/users/mojombo/following/other_user",
"gists_url": "https://api.github.com/users/mojombo/gists/gist_id",
"starred_url": "https://api.github.com/users/mojombo/starred/owner/repo",
"subscriptions_url": "https://api.github.com/users/mojombo/subscriptions",
"organizations_url": "https://api.github.com/users/mojombo/orgs",
"repos_url": "https://api.github.com/users/mojombo/repos",
"events_url": "https://api.github.com/users/mojombo/events/privacy",
"received_events_url": "https://api.github.com/users/mojombo/received_events",
"type": "User",
"site_admin": false

]

当然,既然这些请求是在​​命令​​行中执行,完全可以写成shell​​脚本​​,来处理一系列的工作,比如多个请求,而shell脚本在Mac中,可以使用定时任务触发,进而完成一系列的自动化工作。

本文地址:​​https://www.linuxprobe.com/shell-curl-linux.html​

以上是关于简单介绍shell中的curl网络请求的实现的主要内容,如果未能解决你的问题,请参考以下文章

CURL实现发送Get和Post请求(PHP)

怎么判断curl调用接口返回成功:响应码

curl实现发送Get和Post请求(PHP)

PHP中使用cURL实现Get和Post请求的方法

php使用cURL实现Get和Post请求的方法

在PHP中使用CURL实现GET和POST请求的方法