在PHP中使用HTTP Proxy(HTTP代理)来访问网络资源

  2010-11-17


1. 最简单的方法
连接HTTP代理,给它发一个GET的HTTP头。
指令如下:
telnet proxy.example.com 8080
GET http://www.example.com/some/url.html HTTP/1.0
Host: whatever

最后要跟一个空行表示结束。完了就赶紧读取代理返回的数据就好了。返回的数据是不带HTTP头的文件真实内容。

2. 用CONNECT指令
上面的例子用于获取一个资源时非常简单,但它也有定制性差的缺点:只能做一些非常简单的应用,想发送一个HEAD请求,或自定义下HTTP请求头的话,这种方法行不通。
CONNECT是这么样的一个指令:允许你先连接上代理服务器,返回连接状态后,再接收HTTP请求头,并帮你转发给目标服务器。
看指令:

telnet 10.6.234.33 8080
Trying 10.6.234.33…
Connected to 10.6.234.33.
Escape character is ‘^]’.
CONNECT 10.6.234.33:8080 HTTP/1.0
Host: 10.6.234.33:8080

HTTP/1.1 200 Connection established

HEAD http://www.example.com/css/global.css HTTP/1.1
Host: www.example.com
Accept: */*
Proxy-Connection: Keep-Alive

HTTP/1.1 200 OK
Server: NWS-imgcache
Date: Wed, 17 Nov 2010 04:28:21 GMT
Expires: Wed, 17 Nov 2010 05:28:21 GMT
Cache-Control: max-age=3600
Last-Modified: Mon, 08 Nov 2010 11:01:49 GMT
Content-Type: text/css
Content-Length: 29703
X-Cache-Lookup: MISS from proxy:8080

Connection closed by foreign host.

空行分隔,分别是用户输入、服务器返回、用户输入、服务器返回。

看PHP实现的一个例子。proxy.zip