在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
还是得感谢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
- 在socket中用http代理访问网页的关键问题
- 在socket中用http代理访问网页的关键问题
- 在socket中用printwriter遇到的问题
- 网页访问速度的关键问题和解决方法
- 在Java中用Socket类模拟HTTP协议
- C/C++程序实现通过http代理访问网页内容
- C/C++程序实现通过http代理访问网页内容
- sqlserver中用了user关键子出现的问题
- http代理和socket代理
- http代理和socket代理
- Socket,http代理
- 在JS中用EL表达式访问request作用域里面的值得问题
- Java socket 访问网页
- Java socket 访问网页
- 在Socket做服务器,在手机上用Http访问
- http访问一个网页的全流程
- 在java程序中设置http代理访问网络
- textfield在实际开发中用到的代理方法
- Linux基础(1)-RPM命令
- java做一个电子商城 想用strut技术 求开发配置文件
- C语言实例 爱因斯坦的数学题
- Android Smart Dict - 单词导入 - 文件浏览器
- UDP传输文件总结1
- 在socket中用http代理访问网页的关键问题
- 使用cnvcl中的TCnIp提取IP段
- Visual Studio使用小技巧2 – 使用任务列表(task list) - 补充
- jqGrid分页技术学习(一)jqGrid环境准备
- jqGrid分页技术学习(二)spring环境准备
- C++中的强制类型转换
- jqGrid分页技术学习(三)spring jdbc 通用DAO——添加一条记录
- jqGrid分页技术学习(四)spring jdbc 通用DAO——删除一条记录
- jqGrid分页技术学习(五)spring jdbc 通用DAO——修改一条记录