cURL 应用

下面是从网上搜集的一些使用 curl 来完成的实例,均通过本人测试。

1.获取短链接的真实地址

$ expandurl() { curl -sIL $1 | grep ^Location; }

注意:-i 表示包括 HTTP-header;而 -I 表示仅输出 HTTP-header。

2.通过终端发推

这个在半年前是可行的,现在认证都是 OAuth 认证,所以会出现下面那个 error:

$ curl -u user:pass -d status="Tweeting from the shell" http://twitter.com/statuses/update.xml

<?xml version="1.0" encoding="UTF-8"?>
<errors>
  <error code="53">Basic authentication is not supported</error>
</errors>

3.发渣浪微勃

发送微勃:

$ curl -u user:passwd -d "source=YOUR_KEY&status=helloworld" https://api.weibo.com/2/statuses/update.json -o weibo.html

转发,删除微勃,id 可以通过 firebug 获取:

$ curl -u user:passwd -d "source=YOUR_KEY&id=YOUR_ID" https://api.weibo.com/2/statuses/repost.json
$ curl -u user:passwd -d "source=YOUR_KEY&id=YOUR_ID" https://api.weibo.com/2/statuses/destroy.json

4.在 imgur 匿名上传图片

$ imgur(){ $*|convert label:@- png:-|curl -F "image=@-" -F "key=YOUR_KEY" http://api.imgur.com/2/upload.xml|grep -Eo "<original>(.)*</original>" | grep -Eo "http://i.imgur.com/[^<]*";}

本地上传,curl 以 multipart/form-data 的方式来 POST:

$ curl -F "image=@hello.png" -F "key=YOUR_KEY" http://api.imgur.com/2/upload.xml

将 http://img.com/example.jpg 以 POST 方式上传至 imgur:

curl -d "image=http://img.com/example.jpg" -d "key=YOUR_KEY" http://api.imgur.com/2/upload.json

在过滤类出 url 时,还想了一种比较笨的 regex
Test String:<original>http://i.imgur.com/QmxmH.png</original>
regex:http:\/\/i.imgur.com\/\w{5}\.\w\w\w

以上两个都需要去申请一个 KEY。

5.使用 curl 上传图片至 Movember(via 1)

下面这个脚本定义了在当前目录有一个 $(date +%d).jpg 的图片,将该图片上传至 movember。

#!/bin/bash

email="$1"
pass="$2"
new=$(date +%d).jpg

#entity=`curl -L -s -c cookie -d email=$email -d password=$pass -d rememberme=0 -d process=1 -d submit=1 -d redirect=0 https://www.movember.com/ca/auth/do-login | grep 'http://mobro.co/' | tail -n 1 | awk {'print $2'} | sed "s,'http://mobro.co/,," | sed "s/',//"`
curl -L -s -c cookie -d email=$email -d password=$pass -d rememberme=0 -d process=1 -d submit=Submit -d redirect= https://www.movember.com/ca/auth/do-login  -o /dev/null

entity=`cat cookie | head -n 6  | tail -n 1 | awk '{print $7}'`

#curl -s -b cookie http://ca.movember.com/mospace/your-donation-page/create-post/ -F content=$new -F entity_id=$entity -F name=image -F "filename=$new;image/jpeg;" -F "image=@$new"
curl -s -b cookie http://ca.movember.com/mospace/your-donation-page/create-post/ -F content=$new -F entity_id=$entity -F name=image -F "image=@$new"

6.获取你的出口 IP(via 1)

这个方法比较多,除了使用 curl 之外,还可以通过 wget,w3m 来实现。呃,有点偏题了。

$ alias myip='curl -s www.123cha.com | grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" | head -n 1'
$ w3m -dump "http://www.ip.cn/getip2.php?action=getip"
$ wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'

 
查询域名对应的 IP 或者直接查询 IP:

$ w3m -dump "http://www.ip.cn/getip2.php?action=queryip&ip_url=g.cn"
$ w3m -dump "http://www.ip.cn/getip2.php?action=queryip&ip_url=111.111.111.111"

7.从 filesonic 下载文件(via 1)

注意:由于大陆网络的复杂性,在测试下面这些实例时,建议不要开 ssh tunnel,这样会导致你的 web 跟你 terminal 出现的 IP 不一致,会引起一些非常让人纠结的问题。在 filesnoic 文件下载中,由于我使用的 ssh tunnel 是日本的,而 filesonic 根据我的 IP 把我重定向到了 filesonic.jp,而我的终端却是大陆的 IP,浪费了好长时间来排查。所以不做任何的 proxy 或者全局 VPN 是最佳的选择。

POST 方式获取 cookie,在 Firefox 上使用 HttpFox 插件获取 POST 参数,使用 firebug 同理:

$ curl --cookie-jar cookies.txt --data "email=your@email.this.here" --data "redirect=%2F" --data "password=your_password_here" http://www.filesonic.com/user/login

或者像这样也可以:

$ curl --cookie-jar cookies.txt --data "email=your@email.this.here&redirect=%2F&password=your_password_here" http://www.filesonic.com/user/login

通过 –load-cookies 来加载先前的 cookie,然后下载需要的文件:

$ wget -c --load-cookies cookies.txt http://www.filesonic.com/file/123456789/aabbccfile.dat -O aabbccfile.dat

这里(1,2,3)还有几个不错的应用,一个是管理 wordpress,还有一个是通过 curl 来备份 VPS。

关于 curl 的更多用法,请到 commandlinefu 上搜索。

上面的都解决了,基本上就剩正则了。
如果你有一个问题,可以用正则表达式解决,恭喜你,你现在有两个问题了。

ref:

http://curl.haxx.se/docs/httpscripting.html