在socket中用http代理访问网页的关键问题

以前关注过在socket使用http代理访问网页的问题,原理很简单,就是非代理情况下connect的是目标网页的IP和端口,而使用代理则connect代理IP和端口,连接成功后就直接send数据了。

原理清楚,但一直没应用过,今天正好需要就测试了一下,结果在http代理可用,connect正常的情况下,send数据后总是返回http/1.1 400。最后在一个帖子中找到了原因所在,其实使用http代理来发送GET或POST,其包的格式与非代理的GET或POST有一些区别,区别共有两处:

1.发送的包中可以不加Host ( Host: www.baidu.com )

2.在GET的路径中设置访问页面的完整地址,即 GET http://www.baidu.com/ HTTP/1.1

附上帮我解决这个问题的帖子:

问题解决了,呵呵
还是得感谢mark大大的提醒,我的请求确实有问题。主要问题是Request-URI域,在RFC261中指出,当请求由代理发出时,absoluteURI形式是【要求的】,而我之前用的是abs_path的形式;另外cmwap网关对head貌似也有所检查。
GET http://www.baidu.com/ HTTP/1.1\r\n
Host:www.baidu.com \r\n   (注:此行可以无,代理模式下host头无效)
Accept:*/*\r\n
User-Agent:Nokia7610/2.0 (4.0424.4ch) SymbianOS/7.0s Series60/2.1 Profile/MIDP-2.0 Configuration/CLDC-1.0\r\n
Accept-Language:zh-cn\r\n
Accept-Charset:x-gbk,utf-8;q=0.7,*;q=0.7\r\n
X-Online-Host:www.baidu.com:80 \r\n
Connection:close\r\n\r\n
posted @ 2011-03-29 05:35  冷寒生  阅读(2094)  评论(0编辑  收藏  举报
IT知识库