Http 代理工具 实战 支持网页与QQ代理

        private void CloseSocket(Socket socket)
        {
            CloseSocket(socket, true);
        }
        private void CloseSocket(Socket socket, bool shutdown)
        {
            if (socket != null)
            {
                if (shutdown)
                {
                    socket.Shutdown(SocketShutdown.Both);
                }
                socket.Close();
            }
        }

 

B:创建中转Socket及建立连接


          #region 创建中转Socket及建立连接
            IPEndPoint ipEndpoint = new IPEndPoint(ipAddress, port);
            Socket IPsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                IPsocket.Connect(ipEndpoint); Write("-----Socket 建立连接! IP地址:" + ipAddress + "网址:http://" + host);
            }
            catch (Exception err)
            {
                Write("连接失败 :" + err.Message);
                Write("退出请求!!!");
                CloseSocket(IPsocket, false);
                return;
            }  
            #endregion

 

 

C:QQ代理测试及网页转发


            if (isConnect)//QQ链接方式
            {
                byte[] qqOkData = QQokProxyData();
                clientSocket.Send(qqOkData, 0, qqOkData.Length, 0);
            }
            else//正常网页,直接转发
            {
                IPsocket.Send(sendBytes, 0);
            }

 

函数分解:QQokProxyData

        private byte[] QQokProxyData()
        {
            string data = "HTTP/1.0 200 Connection established";//返回建立成功";
            return System.Text.Encoding.ASCII.GetBytes(data);
        }

 

D:针对QQ需要进行重复来回的发送与接收

          #region QQ发送/接收中转请求
             int length = 0, count = 0;
            if (isConnect)
            {
                System.Threading.Thread.Sleep(400);//关键时延
                //循环发送客户端请求,接收服务器返回
                DateTime start = DateTime.Now;
                while (true)
                {
                    if (IPsocket.Available == 0 && clientSocket.Available == 0)
                    {
                        if (((TimeSpan)(DateTime.Now - start)).TotalMinutes > 15)
                        {
                            break;//掉线重拔处理
                        }
                    }
                    else
                    {
                        start = DateTime.Now;
                    }
                        
                    
                    try
                    {
                        while (clientSocket.Available != 0)
                        {
                            sendLength = clientSocket.Receive(qqSendBytes, qqSendBytes.Length, 0);
                            IPsocket.Send(qqSendBytes, sendLength, 0);
                            Write("发送字节数: " + sendLength.ToString());
                        }

                        System.Threading.Thread.Sleep(500);
                        while (IPsocket.Available != 0)
                        {
                            recvLength = IPsocket.Receive(qqRecvBytes, qqRecvBytes.Length, 0);
                            clientSocket.Send(qqRecvBytes, recvLength, 0);
                            Write("接收字节数: " + recvLength.ToString());
                        }
                    }
                    catch
                    {
                    }
                }
            }
            else
            {
                try
                {
                    do
                    {
                        length = IPsocket.Receive(recvBytes, count, IPsocket.Available, 0);
                        count = count + length;
                        Write("接收转发请求返回的数据中..." + length);
                        System.Threading.Thread.Sleep(200);//关键点,请求太快数据接收不全
                    }
                    while (IPsocket.Available > 0);
                    clientSocket.Send(recvBytes, 0, count, 0);
                }
                catch(Exception err)
                {
                    Write(err.Message);
                }
            }
            #endregion

 

E:结束请求,关闭客户端Socket


            #region 结束请求,关闭客户端Socket
            Write("接收完成。返回客户端数据..." + count);
            CloseSocket(IPsocket);
            CloseSocket(clientSocket);
            recvBytes = null;
            Write("本次请求完成,已关闭连接...");
            Write("-----------------------------请求结束---------------------------");
            #endregion

 

结言:

本QQ代理软件在服务器上运行长达三个多月,使用过程未发现异常退出情况。当然前提就我一个人在用了~哈哈~

 

 

附以前写的几篇文章:

1:简单实现Http代理工具

2:简单实现Http代理工具--端口复用与QQ代理

3:简单实现Http代理工具--完善支持QQ代理

4:C# 控制台程序 不显示在任务栏 只在进程中显示

 

看本篇的时候也请支持一下我的开源框架:CYQ.Data 轻量数据层之路 框架开源系列 索引

时间: 2024-04-30 06:21:53

Http 代理工具 实战 支持网页与QQ代理的相关文章

简单实现Http代理工具--完善支持QQ代理

昨天用上次文章里的代理,测试代理访问Web.QQ.com,发现访问不了,总是返回400错误. 于是开始测试: 1.检测请求头->去掉代理头->无效 2.用CCProxy->访问web.qq.com正常通过 3.用CCProxy做二级代码即:http请求->CCProxy->TCPProxy(自己的程序) 此时再转发请求头-> 无效 4.去掉代理->直接请求->获取请求头->记录下来先 TCPProxy->比较,修改请头头信息->发送->

简单实现Http代理工具--端口复用与QQ代理

话说上一次做完http代理工具后,没有测试QQ代理,回家试了一下,做了一下简单补充,并测试通过.   上次的文章提到,所有公司的服务器端口都封了,只剩下几个通讯的已经正在便用的. 于是,在本地XP下试了一下端口劫持,也称端口复用.抢占80端口. 关键代码就一句:tcplistener.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 在本地实现抢占80端口后,所有的http

跨平台web调试代理工具---whistle

whistle是基于Node实现的跨平台web调试代理工具,支持windows.mac.linux等所有安装了Node的操作系统,可以部署在本地机器.虚拟机或远程服务器,并通过本地网页查看或修改HTTP.HTTPS.Websocket请求(响应)的基本信息.头部及内容等. whistle把每一类操作对应一个协议,每个修改操作抽象成一个uri,通过简单设置请求url到操作uri的对应关系,实现通过配置操作请求,支持通过扩展协议新增功能:具有配置灵活,功能强大等特点. 配置界面及操作请参考:http

简单实现Http代理工具

本来意图是想写个工具放到服务器里代理一下上秋秋的. 没想到N台(电信/联通/移动)的服务器都把端口全封了. 所以以下代码是在本地测试代理网页访问通过.   说下思路再上代码及下载: 其实一句话就是:产生两个Soket,一个负责接收请求和回发请求,另一个负责中转的去请求和接收. 重点一句话就是:每个请求产生一个线程处理,处理时关键是的延时处理(不然数据接收不全).   现在上代码,Proxy自定义类:   Proxy     在控制台里调用:   代码     本人测试: 在打开IE->工具->

博客营销超级秘籍——工具实战篇(上)

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 继上篇写了<博客营销超级秘籍--工具篇>后,我在admin5后台看到竟然有快200人浏览,看来admin5的流量还是名不虚传,今天我们就继续关于博客营销在写写,今天就是<实战篇>,但在实战的过程中,为了营销效果我还是用昨天介绍的<汉塔博客营销软件>来做实战武器. 花开百朵先表一枝,就拿<小游戏>

电脑网页端QQ空间视频如何关闭自动播放

  电脑网页端QQ空间视频如何关闭自动播放          首先用浏览器进入网页端qq空间,在空间首页顶端工具栏点击设置小齿轮 在左侧设置的菜单栏中选择应用设置 进入应用设置界面后选择视频设置后的编辑设置 好啦!此时我们选择[看到的视频不会自动播放]这一栏,最后提交,这样空间的视频就不会自动播放啦!

腾讯公司正式推出网页版QQ主打白领商务市场

9月15日消息,腾讯公司日前正式推出网页版QQ(WebQQ),用户只需要通过电脑或者手机的浏览器登陆web.qq.com,输入QQ账号和密码,就可以和平时一样使用QQ. 腾讯方面表示,WebQQ的推出就是希望更加符合商务用户的体验,从而在商务用户中产生口碑.据悉,为了迎合商务用户的需求,WebQQ在开发之初进行了数十次的用户调研. 据介绍,WebQQ从页面的设计到功能的设计,都与腾讯另一主打商务产品--QQ邮箱有类似之处,重点强化 "简洁.快速"的设计.在功能设计上,与传统客户端相比,

原网页版QQ即将说再见了吗?其实我也没怎么用过

摘要: 今天打开WebQQ发现了这样一个画面:相聚有时,后会无期,这是踩着韩寒的节奏说再见吗?出生于2009年的网页版QQ原本是帮助那些不想要下载软件的用户登录QQ的,比如公用电脑登录.操 今天打开WebQQ发现了这样一个画面:"相聚有时,后会无期",这是踩着韩寒的节奏说再见吗?出生于2009年的网页版QQ原本是帮助那些不想要下载软件的用户登录QQ的,比如公用电脑登录.操作方式和桌面型OS非常相似,并且拥有自己的应用分发平台. 而到去年9月,腾讯又推出基于网页的SmartQQ,与软件版

Tomcat安装+Nginx反向代理Tomcat+Apache使用mod_jk+mod_proxy反向代理和负载均衡【图解】

一.Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目由Apache.Sun 和其他一些公司及个人共同开发而成.由于有了Sun 的参与和支持最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范.因为Tomcat 技术先进.性能稳定而且免费因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可成为目前比较流行