Skip to content

Instantly share code, notes, and snippets.

@arrayadd
Last active May 24, 2017 14:05
Show Gist options
  • Save arrayadd/ee5d008e45e4f15886a5194d51a65251 to your computer and use it in GitHub Desktop.
Save arrayadd/ee5d008e45e4f15886a5194d51a65251 to your computer and use it in GitHub Desktop.
【Linux】突然要发起一个url请求

实际工作中不时会遇到需要在服务器上临时请求一个url,看下这个url返回的数据是否正常或者查看一些http响应头信息,以验证自己临时一个想法,这时候如果还从服务器切换到桌面,再打开浏览器,输入url,F12...就显得特别繁琐,会打断这种工作的「连续性」。

还好,linux下我们可以通过curl 这个命令来模拟浏览器发起一次请求,然后得到和提取数据。

下面看示例,发起一次get请求,查看北京市的经纬度(返回json数据):

[od]$ curl -XGET "http://gc.ditu.aliyun.com/geocoding?a=北京市"
{"lon":116.40752,"level":1,"address":"","cityName":"","alevel":4,"lat":39.90403}

上面,-XGET是可以省略的,默认就是get方式。其它常见参数还有-XPOST,-XPUT,-XDELETE X后面可以有空格,例如-X GET

如果我们发起请求时候,需要携带参数呢?

get方式还好说,参数直接在url后面用?拼接就行。那POST的方式呢,如何提交数据,这时候就要用curl -X POST -d "a=上海市" "http://gc.ditu.aliyun.com/geocoding" 这种带-d "a=上海市&b=xxx"的方式携带数据了。

但我们都知道,实际中post方式提交内容都非常多且复杂,例如一个包含商品及用户各种信息的表单,如果用上面那种拼接参数方式,linux下换行一不小心就会出问题。这时候我们可以用这种方式curl -X POST -d @./param.txt "http://gc.ditu.aliyun.com/geocoding" 也就是在 -d参数后面 用@文件方式,把一个文件中内容作为POST数据提交,非常方便。当然,实际中这个文件可能是另一个命令输出的结果,不要然还不如在浏览器中用post方式提交。

curl 还有一堆参数,只需要知道有这个功能就行,用的时候能反映上来,提供一种思路上的拓展就行。

例如,

  • curl -i 可以看到http响应头的信息。
  • curl -L 有的网址是自动跳转的。使用-L参数,curl就会跳转到新的网址。
  • curl -H "name:value" 设置http请求头数据
  • curl -o result 将url返回的结果保存到文件result中
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment