利用 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 | |
pycurl 官方还没有把 libcurl 这个特性加入,需要在 pycurl/src/pycurl.c 中添加一行(点击查看 diff 格式的补丁 ,for pycurl-7.19.0 )
1 2 | 3564d3563 < insint_c( d, "PROXYTYPE_SOCKS5_HOSTNAME", CURLPROXY_SOCKS5_HOSTNAME) ; |
PHP 通过 php-curl 的使用方法
1 | |
PHP 官方也还没有把 libcurl 这个特性加入,需要在 ext/curl/interface.c 中添加(点击查看 diff 格式的补丁 ,for php-5.3.4 )
1 2 3 4 5 6 7 8 9 10 | 756 ,764d755 < /* CURLPROXY_SOCKS5_HOSTNAME support works in 7.18.0+ */ < #if LIBCURL_VERSION_NUM >= 0x071200 < REGISTER_CURL_CONSTANT( CURLOPT_PROXY_TRANSFER_MODE) ; < REGISTER_CURL_CONSTANT( CURLPROXY_SOCKS4A) ; < REGISTER_CURL_CONSTANT( CURLPROXY_SOCKS5_HOSTNAME) ; < REGISTER_CURL_CONSTANT( CURLOPT_SEEKFUNCTION) ; < REGISTER_CURL_CONSTANT( CURLOPT_SEEKDATA) ; < #endif < |
利用 curl 验证不同服务器上的文件
很多时候网站并不是一个 IP 地址,而是分布在多个 IP 地址上。这些 IP 地址通过智能解析,分配到离用户最快的节点上(CDN 就是干这个的 )。如何验证这些 IP 地址上的文件或者内容是否一致呢?通过 curl 抓文件的时候,如果希望指定抓取网站某个服务器的内容,除了比较土的修改 HOSTS 文件,还可以通过 curl 来做。例如 www.sina.com.cn 至少有这两个 IP 地址:
202.108.33.84 和 60.215.128.131
[ nobody@ www ~] $ curl http:// 202.108.33.84/ -H "Host: www.sina.com.cn" -I HTTP/ 1.0 200 OK Date: Sat, 25 Dec 2010 12 :10 :17 GMT Server: Apache/ 2.0.63 ( Unix) Last-Modified: Sat, 25 Dec 2010 12 :09:06 GMT Accept-Ranges: bytes X-Powered-By: mod_xlayout_jh/ 0.0.1vhs.markIII.remix Cache-Control: max-age=60 Expires: Sat, 25 Dec 2010 12 :11 :17 GMT Vary: Accept-Encoding X-UA-Compatible: IE =EmulateIE7 Content-Type: text/ html Age: 5 Content-Length: 518162 X-Cache: HIT from xd33-84.HP08040023.sina.com.cn Connection: close
[ nobody@ www ~] $ curl http:// 60.215.128.131/ -H "Host: www.sina.com.cn" -I HTTP/ 1.0 200 OK Date: Sat, 25 Dec 2010 12 :11 :45 GMT Server: Apache/ 2.0.63 ( Unix) Last-Modified: Sat, 25 Dec 2010 12 :09:06 GMT Accept-Ranges: bytes X-Powered-By: mod_xlayout_jh/ 0.0.1vhs.markIII.remix Cache-Control: max-age=60 Expires: Sat, 25 Dec 2010 12 :12 :45 GMT Vary: Accept-Encoding X-UA-Compatible: IE =EmulateIE7 Content-Type: text/ html Age: 42 Content-Length: 518162 X-Cache: HIT from sd128-131.sina.com.cn Connection: close
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
本文介绍如何使用curl和pycurl通过SSH建立SOCKS5代理访问特定网站,同时演示了如何利用curl验证不同服务器上的文件一致性。
3094

被折叠的 条评论
为什么被折叠?



