请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 175|回复: 0

aardio 代理服务器遇到的问题

[复制链接]

1

主题

2

帖子

2

积分
交易币
0

新手入门

Rank: 1

发表于 2021-2-7 18:31:48 | 显示全部楼层 |阅读模式
本帖最后由 w3638 于 2021-2-7 18:33 编辑

弄了个本地代理服务器,监听本地1080端口,然后设置IE代理,浏览器访问如百度的时候,数据代理转发到本地代理服务器,然后,本地代理服务器再转发给A服务器,A服务器再转发给百度,然后百度返回数据给A服务器,A服务器再把数据返回到本地代理服务器,本地代理服务器最后输出数据到浏览器。

[aardio] 纯文本查看 复制代码
import win.ui;
import wsock.tcp.server;
import wsock;
import console;
import inet.http;
/*DSG{{*/
var winform = win.form(text="aardio form";right=313;bottom=159)
winform.add(
button={cls="button";text="启动";left=72;top=48;right=218;bottom=91;z=1}
)
/*}}*/

winform.button.oncommand = function(id,event){
    //****停止 ****///
    if(winform.button.text != "启动"){
        thread.set("stop", true);  // 设置标志位为真
        inet.http().get("http://127.0.0.1:1080");  // 很重要  访问一次本地地址 让 tcpServer.forever 回调函数 ,退出线程 关闭端口
        winform.start.text = "启动";
        winform.text="http代理已停止";
        return false; 
    }
    
    thread.set("stop", null) 
    winform.button.text = "停止";
    winform.text="http代理运行中.....";
    thread.create(httpserver);
}

httpserver =function(){
    import wsock.tcp.server;
    import win;
    
    var tcpServer, errMsg = wsock.tcp.server("0.0.0.0",1080)
    if(!tcpServer){
        win.msgboxErr("启动失败 端口可能被占用")
        return;
    }

    tcpServer.forever(
        function(acceptSocket){ 
            if(thread.get("stop")){
                var response = wsock.tcp.client(,acceptSocket);
                response.close(); 
                ..io.print("Stop Service")
                return false; 
            }
            ..thread.invoke( 
                 function(acceptSocket,winform){
                    import console;
                    import wsock.tcp.client;
                    import wsock.tcp.asynClient;
 
                    var tcp_client = wsock.tcp.client(,acceptSocket);  
                    var data = "";
                    var content = tcp_client.read();
                        
                                        //创建异步tcp客户端
                    var asyn_client = wsock.tcp.asynClient();
                    //接收A服务器返回的数据,并输出到浏览器
                                        asyn_client.onRead = function(err){
                                            for(str,readSize,remainSize in asyn_client.eachRead() ){
                                                tcp_client.write(str);
                                            }
                                        }
                                        //连接A服务器
                                        asyn_client.connect("www.xxxxxx.com",443);

                                        var tProtocol = ..string.splitEx(content,"\s+",3);
                                        //判断是否CONNECT
                                        if( ( #tProtocol == 3 ) && (tProtocol[1]=="CONNECT") ){
                                                data = content + '\r\n' + tcp_client.readAll();
                                                tcp_client.write("HTTP/1.1 200 Connection Established"+'\r\n\r\n');
                                                //遇到的问题:访问https的URL,网页提示"连接已重置",错误代码"ERR_CONNECTION_RESET"
                                        }else{
                                                data = data + content + '\r\n';
                                                //转发数据到A服务器
                                                for(str,readSize,remainSize in tcp_client.eachRead() ){
                                                data = data + str + '\r\n';
                                                if(#remainSize==0){
                                                        asyn_client.write(data);
                                                        console.log(data);
                                                        //遇到奇怪的地方:访问http的URL,需要加console.log(data);这个才能打开网页,否则网页一直加载中,不懂什么情况
                                                }
                                            }
                                        }
                                        
                    
 
                },acceptSocket,winform)
        }
    ) 
 
}

winform.show();
win.loopMessage();
return winform;


希望高手能帮我解决困惑!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



GMT+8, 2021-3-8 11:35 , Processed in 0.074072 second(s), 26 queries .

© 2001-2011 Powered by Discuz! X3.2.

快速回复 返回顶部 返回列表