curl 和 libcurl 小技巧

利用 curl 和 pycurl 翻墙

需要 curl 和 libcurl 的版本高于 7.18.0,并且事先建立好可翻墙的代理,例如用 SSH 建立 SOCKS5 代理:

[
nobody@
www ~]
$ ssh
 username@
omehost.com -CN
 -f
 -D
 127.0.0.1:1080

curl 使用方法

[
nobody@
www ~]
$ curl http://
twitter.com/
 --socks5-hostname
 127.0.0.1:1080

Python 通过 pycurl 的使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import
 pycurl
import StringIO
sio = StringIO .StringIO ( )
 
url = "http://www.twitter.com/"
 
c = pycurl.Curl ( )
c.setopt ( pycurl.URL , url.encode ( 'utf-8' ) )
c.setopt ( pycurl.WRITEFUNCTION , sio.write )
c.setopt ( pycurl.FOLLOWLOCATION , 1 )
c.setopt ( pycurl.MAXREDIRS , 5 )
c.setopt ( pycurl.PROXY , '127.0.0.1:1080' )
c.setopt ( pycurl.PROXYTYPE , pycurl.PROXYTYPE_SOCKS5_HOSTNAME )
c.perform ( )
 
print sio.getvalue ( )

pycurl 官方还没有把 libcurl 这个特性加入,需要在 pycurl/src/pycurl.c 中添加一行(点击查看 diff 格式的补丁 ,for pycurl-7.19.0

PHP 通过 php-curl 的使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
<
 ?php
$url = "http://twitter.com/" ;
 
$ch = curl_init ( ) ;
curl_setopt ( $ch , CURLOPT_URL, $url ) ;
curl_setopt ( $ch , CURLOPT_HEADER, 0 ) ;
curl_setopt ( $ch , CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME) ;
curl_setopt ( $ch , CURLOPT_PROXY, "127.0.0.1:1080" ) ;
 
curl_exec ( $ch ) ;
 
curl_close ( $ch ) ;
?>

PHP 官方也还没有把 libcurl 这个特性加入,需要在 ext/curl/interface.c 中添加(点击查看 diff 格式的补丁 ,for php-5.3.4

利用 curl 验证不同服务器上的文件

很多时候网站并不是一个 IP 地址,而是分布在多个 IP 地址上。这些 IP 地址通过智能解析,分配到离用户最快的节点上(CDN 就是干这个的 )。如何验证这些 IP 地址上的文件或者内容是否一致呢?通过 curl 抓文件的时候,如果希望指定抓取网站某个服务器的内容,除了比较土的修改 HOSTS 文件,还可以通过 curl 来做。例如 www.sina.com.cn 至少有这两个 IP 地址:

202.108.33.8460.215.128.131

20101205 发布的最新版 curl 和 libcurl(7.21.3)增加了一个 --resolve CURLOPT_RESOLVE ,能够更优雅的解决这个问题。本来这两个参数是为了使用者能够更灵活的调整缓 存,也能够避免出现 HTTPS 相关的证书问题。可以参考这个使用方法:

[
nobody@
www ~]
$ curl --resolve
 "encrypted.google.com:443:46.82.174.68"
 https://
encrypted.google.com/
 -I
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值