aardio 文档

aardio 代理服务器设置指南

一. 常用格式

例如有以下代理服务器:

那么 aardio 中所有 inet,web.rest 命名空间的库与函数的代理参数都可以如下设置。

代理设置忽略大小写,先记住几个简单的规则就足够用了,后面再细说原理。

二. 设置代理

设置代理的方法分为以下四类

1. 设置系统全局代理服务器

例如

import inet.conn;
inet.conn.setProxy( ,"socks=127.0.0.1:1081")

一般只要指定代理服务器参数就可以,其他参数自动指定。 第一个参数是网络连接名,省略即可。 第二个参数指定代理服务器。 第三个参数是指定不走代理的 proxyBypass 参数,aardio 会自动设定,一般不需要去指定。

2. 设置当前进程内代理服务器,不影响其他进程

例如

import inet;
inet.setProxy("socks=127.0.0.1:1081")

第一个参数指定代理服务器。 第二个参数是指定不走代理的 proxyBypass 参数,aardio 会自动设定,一般不需要去指定。

3. 设置 HTTP 客户端对象的代理

aardio 以下所有类的构造参数全部是一样的:

所有这些类的构造函数用法都一样,这些参数都是可选参数,一般情况下不必指定任何参数。

参数用法:

web.rest 下面所有基于 web.rest.client 的类构造对象实例时都会调用基类 web.rest.client 的构造函数 web.rest.client(userAgent, proxy,proxyBypass,flags),并将构造参数转发给基类。

而 web.rest.client 构造函数被调用时,又会自动调用 inet.http 的构造函数 inet.http(userAgent, proxy,proxyBypass,flags),并将构造参数转发给 inet.http。

下面是一个例子:

import web.rest.jsonClient;

//第二个构造参数指定代理服务器
var http = web.rest.jsonClient(,"socks=127.0.0.1:1081");

//声明 HTTP 接口对象
//声明 API,参数 @3 指定的模式串用于匹配返回数据
var api = http.api("http://myip.ipip.net",,"(\d+\.\d+\.\d+\.\d+)");

//发送 GET 请求
var ret = api.get();

4. 设置浏览器或浏览器控件的代理服务器

二. 代理服务器格式说明

代理服务器的写法格式一般是 WinINet 规定的格式,参考 启用 Internet 功能 (Enabling Internet Functionality)。 Chromium 内核的浏览器沿用了 WinINet 的写法,但做了一些小的扩展与改动,参考 Proxy support in Chrome

设置单个完整的代理服务器格式是这样: "客户端被代理协议=代理服务器协议://主机地址:端口号"

等号后面是指代理服务器用什么协议实现的代理。 等号前面指的是指被代理的客户端请求协议。

如果有多个服务器用分号隔开 "http=http://127.0.0.1:1089;https=http://127.0.0.1:1082" 上面分别为 http 协议,https 协议指定了不同的代理服务器。

其实现在 http,ftp 这些协议很少见了,而且就算用了一般也不必要分开设置。 所以等号前面通常可以省略,一般只要直接设置所有协议就可以了。

而你写在等号后面的 http:// 也是多余的,因为这是默认值,写不写作用是一样。 所以其实就是本文最前面说的,用最简单的写法 "127.0.0.1:1082" 就可以了。

需要注意 SOCKS 服务器是一个特例。 WinINet 接口 SOCKS 代理只能严格地写为 socks=127.0.0.1:1081 这一种格式。 也就是说只能指定被代理协议为 socks,不能在代理字符串中使用 socks:// 这种指定 SOCKS 代理协议的写法。 并且 WinINet 仅支持 SOCKS4 协议(不支持 SOCKS5 )。

inet.http 或 web.rest 会将代理字符串开头的 socks4://,"socks5://,socks:// 自动替换为 socks=(忽略大小写)。

而 Chromium 内核浏览器支持 SOCKS5 ,SOCKS 代理通常写为 socks5://127.0.0.1:1081 格式。

通常 SOCKS5 代理服务器也会实现 SOCKS4 协议以实现降级兼容。我们也可以使用 aardio 标准库 wsock.tcp.socks5Server 创建兼容 SOCKS4/SOCKS5 协议的代理服务端,并利用其 setUpstreamProxy 方法转发到 SOCKS5 代理服务器。

对于 aardio:

三. 绕过代理服务器参数格式说明

proxyBypass 指定不走代理的目标主机 IP 或域名,支持通配符,多个地址用分号隔开。

web.rest.client, inet.http 这些创建的客户端用于请求指定的地址,所以 proxyBypass 参数一般没有实际意义。

而 inet.setProxy 以及 inet.conn.setProxy 内部都自动设置了这个参数。

inet.setProxy 设置 proxyBypass 参数的源码如下:


if(!proxyBypass){
    proxyBypass="<local>;<lan>;localhost;127.*;windows10.microdone.cn"
}

proxyBypass = ..string.replace(proxyBypass,"%\<\>",{
    ["<lan>"]  ="10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*"
})

<lan> 由 aardio 替换为 局域名 IP 地址。

四. 查看系统代理服务器设置

代码如下:

//打开系统代理设置页
if(_WIN10_LATER) raw.execute("ms-settings:network-proxy"); 
else raw.execute("control.exe","inetcpl.cpl,,4"); 

Markdown 格式