- 支援跨設備、跨地區快速部署
- 不依賴固定出口 IP,可大規模彈性使用
- 更適合與自動化系統或帳號指派流程集成
- 可與市售代理服務或自建代理池快速串接
📚 適用對象
本篇教學將指導你如何以 帳號密碼方式對接代理伺服器,並成功綁定至我們系統中的指紋環境,實現匿名、安全、可控的多帳號操作流程。 本教學適合:- 技術開發者(需從程式中調用代理連線)
- 自動化操盤團隊(自建養號 / 任務腳本)
- 代理服務商(需要與指紋環境整合)
- 系統整合商(需將我們系統嵌入業務流程)
🧪 實作內容
為了讓不同技術背景的用戶都能快速上手,本教學將提供多種語言版本的代碼示例,包括:- ✅ Python
- ✅ Node.js
- ✅ Shell / curl
- ✅ (如有需要可延伸:Go、PHP、Selenium、Playwright 等)
🧩 代码演示
- Go
- Php
- Java
- Python
- Node.js
demo.go
複製
package main
import (
"context"
"fmt"
"io/ioutil"
"net"
"net/http"
"net/url"
"strings"
"time"
"golang.org/x/net/proxy"
)
var account = "xx"
var password = "xx"
var proxyServer = "xx"
var testApi = "https://ipinfo.io/"
func main() {
go httpProxy(proxyServer, account, password)
go Socks5Proxy(proxyServer, account, password)
time.Sleep(time.Minute)
}
func httpProxy(proxyUrl, user, pass string) {
defer func() {
if err: = recover();
err != nil {
fmt.Println(time.Now().Format("2006-01-02 15:04:05 07"), "http", "response:", err)
}
}()
urli: = url.URL {}
if !strings.Contains(proxyUrl, "http") {
proxyUrl = fmt.Sprintf("http://%s", proxyUrl)
}
urlProxy, _: = urli.Parse(proxyUrl)
if user != "" && pass != "" {
urlProxy.User = url.UserPassword(user, pass)
}
client: = & http.Client {
Transport: & http.Transport {
Proxy: http.ProxyURL(urlProxy),
},
}
rqt, err: = http.NewRequest("GET", testApi, nil)
if err != nil {
panic(err)
return
}
response, err: = client.Do(rqt)
if err != nil {
panic(err)
return
}
defer response.Body.Close()
body, _: = ioutil.ReadAll(response.Body)
fmt.Println(time.Now().Format("2006-01-02 15:04:05 07"), proxyUrl, "【http success】", "response:", response.Status, string(body))
return
}
func Socks5Proxy(proxyUrl, user, pass string) {
defer func() {
if err: = recover();
err != nil {
fmt.Println(time.Now().Format("2006-01-02 15:04:05 07"), proxyUrl, "response:", err)
}
}()
var userAuth proxy.Auth
if user != "" && pass != "" {
userAuth.User = user
userAuth.Password = pass
}
dialer, err: = proxy.SOCKS5("tcp", proxyUrl, & userAuth, proxy.Direct)
if err != nil {
panic(err)
}
httpClient: = & http.Client {
Transport: & http.Transport {
DialContext: func(ctx context.Context, network, addr string)(conn net.Conn, err error) {
return dialer.Dial(network, addr)
},
},
Timeout: time.Second * 10,
}
if resp, err: = httpClient.Get(testApi);
err != nil {
panic(err)
} else {
defer resp.Body.Close()
body, _: = ioutil.ReadAll(resp.Body)
fmt.Println(time.Now().Format("2006-01-02 15:04:05 07"), proxyUrl, "【socks5 success】", "response:", string(body))
}
}
demo.php
複製
<? php
$user = "user";
$password = "password";
$targetUrl = "https://ipinfo.io/";
$proxyServer = "xxx";
$proxyUserPwd = "$user:$password";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $targetUrl);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_PROXYTYPE, 0);
curl_setopt($ch, CURLOPT_PROXY, $proxyServer);
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;)");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyUserPwd);
$result = curl_exec($ch);
$err = curl_error($ch);
curl_close($ch);
var_dump($err);
var_dump($result);
demo.java
複製
package demo;
import okhttp3.Credentials;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
class AutProxyJava {
public static void main(String[] args) throws IOException {
testWithOkHttp();
testSocks5WithOkHttp();
}
public static void testWithOkHttp() throws IOException {
String url = "https://ipinfo.io/";
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("host", "port"));
OkHttpClient client = new OkHttpClient().newBuilder().proxy(proxy).proxyAuthenticator((route, response) - > {
String credential = Credentials.basic("account", "password");
return response.request().newBuilder()
.header("Proxy-Authorization", credential)
.build();
}).build();
Request request = new Request.Builder().url(url).build();
okhttp3.Response response = client.newCall(request).execute();
String responseString = response.body().string();
System.out.println(responseString);
}
public static void testSocks5WithOkHttp() throws IOException {
String url = "https://ipinfo.io/";
Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("host", "port"));
java.net.Authenticator.setDefault(new java.net.Authenticator() {
private PasswordAuthentication authentication =
new PasswordAuthentication("account", "password".toCharArray());
@
Override
protected PasswordAuthentication getPasswordAuthentication() {
return authentication;
}
});
OkHttpClient client = new OkHttpClient().newBuilder().proxy(proxy).build();
Request request = new Request.Builder().url(url).build();
okhttp3.Response response = client.newCall(request).execute();
String responseString = response.body().string();
System.out.println(responseString);
}
}
demo.py
複製
import _thread
import time
import requests
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger / 6.5.19 NetType / 4 G Language / zh_TW ",
}
mainUrl = 'https://ipinfo.io/'
def testUrl(): proxy = {
'http': 'http://account:password@ip:port',
'https': 'http://account:password@ip:port',
}
try: res = requests.get(mainUrl, headers = headers, proxies = proxy, timeout = 10)
print(res.status_code, res.text)
except Exception as e: print("error", e)
pass
for i in range(0, 10): _thread.start_new_thread(testUrl, ())
time.sleep(0.1)
time.sleep(10)
demo.js
複製
#!/usr/bin/env node
require('request-promise')({
url: 'https://ipinfo.io/',//请求url
proxy: 'http://username:password@ip:port',
})
.then(function(data){ console.log(data); },
function(err){ console.error(err); });
