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

来源:互联网 发布:php json null 编辑:程序博客网 时间:2024/04/30 06:01

以前关注过在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