Http代理前后的不同之处

winsock实现HTTP代理提交HTTP请求的方法有两种 来自华益云HTTP代理
1、直接请求
2、先连通远程服务器后就相普通提交请求一样提交HTTP请求
说一下第一种方法:
先说一下我们普通的提交HTTP请求的过程:
直接连接远程服务器后,当连接成功时向服务器提交HTTP头,注意看看大概的格式
GET / HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: 百度一下,你就知道
Connection: Keep-Alive
再看看使用代理的连接方法
先连接代理服务器(IP地址、端口),然后向代理服务器提交这样的HTTP头
GET 百度一下,你就知道 HTTP/1.0
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: 百度一下,你就知道
Proxy-Connection: Keep-Alive
区别就这么一点,
1、连接的不是目标服务器的IP地址和端口而是代理服务器IP地址和端口
2、提交的不是相对的地址而是绝对的HTTP地址
3、Connection: Keep-Alive 和 Proxy-Connection: Keep-Alive 的 区别
再说说第二种方法:
其实这种方法很强大,他除了可以实现HTTP协议的代理,还可以实现其他TCP/IP协议的处理。
如:POP2、SMTP、FTP等等
先看看理论把,其实就是客户端连接代理服务器后,让代理服务器去连接远程服务器,当代理服务器连接好远程服务器
成功后,会返回连接结果给客户端,这时客户端判断结果,如果连接成功了就直接发送正常的数据给代理,代理收到数据
后立刻转发给服务器,其实就是个中转站。就是开始连接的时候不同,后面所有的通讯可以照常操作
客户端先连接代理服务器,然后向代理服务器提交请求,告诉他要连接到哪:
CONNECT www.baidu.com:80 HTTP/1.1
Accept: */*
Content-Type: text/html
Proxy-Connection: Keep-Alive
Content-length: 0
这时,如果代理服务器连接成功会返回这样一段信息(客户端收到的信息,注意,不要这个时候断开连接哟,呵呵)
HTTP/1.0 200 Connection established
Proxy-agent: CCProxy 6.4.2 '这里是代理程序的名称,看你的是什么代理软件
这时你就可以发出正常的请求了
GET / HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: 百度一下,你就知道
Connection: Keep-Alive
然后就可以收到远程服务器发过来的网页信息了
如何判断返回的消息接收完了呢?有时候消息会分成几段来返回
这个要看协议的,如果是HTTP协议,可以有两种方式判断。
1、通过Content-length的值判断要接收的数据大小,数据够了就断开连接,注意,HTTP头的数据大小不算。
2、在HTTP换上Connection: Close,由服务器发送完服务器自动断开,不用你去判断什么时候该断开
你就管收数据,收到 Close事件时断开连接就可以了。
添加图片注释,不超过 140 字(可选)

相关推荐