代码样例-Socks代理
本文档包含编程请求Socks代理服务器的代码样例,供开发者参考。
代码样例使用说明
- 代码样例不能直接运行,因为代码中的代理服务器
59.38.241.25:23918
、用户名myusername
、密码mypassword
都是虚构的,您替换成自己真实的信息就可以正常运行了。 - 代码样例正常运行所需的运行环境和注意事项在样例末尾均有说明,使用前请仔细阅读。
- 使用代码样例过程中遇到问题请联系售后客服,我们会为您提供技术支持。
Python2
requests
requests请求网页
使用提示
- http/https网页均可适用
- 运行环境要求:requests >= 2.10.0
- socks支持是requests的额外特性,需要安装才能使用:
pip install requests[socks]
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#!/usr/bin/env python
#-*- coding: utf-8 -*-
"""使用requests请求socks代理服务器
请求http和https网页均适用
"""
import requests
import random
# 要访问的目标网页
page_url = "http://dev.kdlapi.com/testproxy"
# API接口,返回格式为json
api_url = ""
ip_list = requests.get(api_url).json()['data']['proxy_list']
proxy = random.choice(ip_list)
# 用户名和密码(私密代理/独享代理)
username = "username"
password = "password"
proxies = {
'http': 'socks5://%s:%s@%s' % (username, password, proxy),
'https': 'socks5://%s:%s@%s' % (username, password, proxy),
#提示:如果希望在代理服务器上进行dns解析,把socks5替换成socks5h
}
headers = {
"Accept-Encoding": "gzip", #使用gzip压缩传输数据让访问更快
}
r = requests.get(page_url, proxies=proxies, headers=headers)
print(r.status_code) #获取Reponse的返回码
if r.status_code == 200:
r.enconding = "utf-8" #设置返回内容的编码
print(r.content) #获取页面内容
urllib2
urllib2请求网页
使用提示
- 运行环境要求 python2.6 / 2.7
- http/https网页均可适用
- 使用此样例需要安装PySocks:
pip install PySocks
#!/usr/bin/env python
#-*- coding: utf-8 -*-
"""使用urllib2请求socks5代理服务器
请求http和https网页均适用
"""
import urllib2
import random
import json
import zlib
import socks
from sockshandler import SocksiPyHandler
# 要访问的目标网页
page_url = "http://dev.kdlapi.com/testproxy"
# API接口
api_url = ""
# API接口返回的IP
ip_list = json.loads(urllib2.urlopen(api_url).read().decode('utf-8'))['data']['proxy_list']
print(ip_list)
proxy = random.choice(ip_list)
proxy_ip, proxy_port = proxy.split(":")
proxy_port = int(proxy_port)
rdns = False # 是否在代理服务器上进行dns查询
# 用户名和密码(私密代理/独享代理)
username = "username"
password = "password"
opener = urllib2.build_opener(SocksiPyHandler(socks.SOCKS5, proxy_ip, proxy_port, rdns, username, password))
opener.addheaders = [
("Accept-Encoding", "Gzip"), # 使用gzip压缩传输数据让访问更快
]
r = opener.open(page_url)
print r.code # 获取Reponse的返回码
content = r.read()
content_encoding = r.headers.getheader("Content-Encoding")
if content_encoding and "gzip" in content_encoding:
print zlib.decompress(content, 16+zlib.MAX_WBITS) # 获取页面内容
else:
print content # 获取页面内容
Selenium
Chrome
Chrome(IP白名单 Linux)
使用提示
- 运行环境要求 python2.x + selenium + chrome + chrome driver + xvfb
- socks5代理网页均可适用
- 安装xvfb:
pip install xvfbwrapper
- 开发环境配置参考
# _*_ coding:utf‐8 _*
'''
基于selenium下Chrome的socks5白名单访问代理
ubuntu14.04环境
使用虚拟显示实现无窗口Chrome浏览器
官方目前没有支持账号密码认证代理
'''
from xvfbwrapper import Xvfb
from selenium import webdriver
import time
#要访问的目标网页
page_url = "http://dev.kdlapi.com/testproxy"
#代理服务器ip和端口
proxy = '59.38.241.25:23916'
#复制一份配置文件
desired_capabilities = webdriver.DesiredCapabilities.INTERNETEXPLORER.copy()
#改变配置文件的复制版本.
PROXY = "socks5://" + proxy
desired_capabilities['proxy'] = {
"httpProxy": PROXY,
"ftpProxy": PROXY,
"sslProxy": PROXY,
"noProxy": None,
"proxyType": "MANUAL",
"class": "org.openqa.selenium.Proxy",
"autodetect": False
}
# 使用新实例驱动
options = webdriver.ChromeOptions()
#无窗口启动配置好的Chrome
xvfb = Xvfb()
xvfb.start()
driver = webdriver.Chrome(chrome_options=options,desired_capabilities=desired_capabilities)
#尝试访问登陆页面,登录页面有你的代理IP
driver.get(page_url)
#打出网页title和网页源代码
print driver.title
print driver.page_source
#退出
driver.quit()
xvfb.stop()
Chrome(IP白名单 Windows)
使用提示
- 运行环境要求selenium + chrome + chromedriver
- socks5代理网页均可适用
- 请先下载chromedriver并将chromedriver添加到环境变量中
# -*- coding: utf-8 -*-
"""
selenium + chrome + windows + ip白名单
"""
from selenium import webdriver
# 代理服务器
proxy_ip_port = '42.49.11.109:21080'
proxy = 'socks5://' + proxy_ip_port
# 目标网页
page_url = "https://dev.kuaidaili.com/testproxy"
co = webdriver.ChromeOptions()
co.add_argument('--proxy-server=%s' % proxy) # 设置代理
co.add_argument('--headless') # 无窗口模式, 可选
# 启动chrome
driver = webdriver.Chrome(chrome_options=co)
# 抓取网页
driver.get(page_url)
# 输出网页内容
print(driver.page_source)
# 退出chrome
driver.quit()
Chrome(用户名密码认证 Windows)
使用提示
- 运行环境要求selenium + chrome + chromedriver
- socks5代理网页均可适用
- 请先下载chromedriver并将chromedriver添加到环境变量中
# -*- coding: utf-8 -*-
"""
selenium + chrome + windows + 用户名密码认证
"""
from selenium import webdriver
proxyauth_plugin_path = create_proxyauth_extension(
proxy_host="42.49.11.109", # 代理服务器ip
proxy_port=21080, # 代理服务器端口
proxy_username="yourusername", # 用户名
proxy_password="yourpassword", # 密码
scheme='socks5', # socks5协议
)
# 目标网页
page_url = "https://dev.kuaidaili.com/testproxy"
co = webdriver.ChromeOptions()
co.add_argument("--start-maximized") # 最大化窗口, 不加可能报错
co.add_extension(proxyauth_plugin_path) # 添加扩展
# 启动chrome, 抓取网页
driver = webdriver.Chrome(chrome_options=co)
driver.get("https://dev.kuaidaili.com/testproxy")
# 输出网页内容
print(driver.page_source)
# 自动生成扩展的函数
def create_proxyauth_extension(proxy_host, proxy_port,
proxy_username, proxy_password,
scheme='http', plugin_path=None):
import string
import zipfile
if plugin_path is None:
plugin_path = 'vimm_chrome_proxyauth_plugin.zip'
manifest_json = """
{
"version": "1.0.0",
"manifest_version": 2,
"name": "Chrome Proxy",
"permissions": [
"proxy",
"tabs",
"unlimitedStorage",
"storage",
"<all_urls>",
"webRequest",
"webRequestBlocking"
],
"background": {
"scripts": ["background.js"]
},
"minimum_chrome_version":"22.0.0"
}
"""
background_js = string.Template(
"""
var config = {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: "${scheme}",
host: "${host}",
port: parseInt(${port})
},
bypassList: ["foobar.com"]
}
};
chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
function callbackFn(details) {
return {
authCredentials: {
username: "${username}",
password: "${password}"
}
};
}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{urls: ["<all_urls>"]},
['blocking']
);
"""
).substitute(
host=proxy_host,
port=proxy_port,
username=proxy_username,
password=proxy_password,
scheme=scheme,
)
with zipfile.ZipFile(plugin_path, 'w') as zp:
zp.writestr("manifest.json", manifest_json)
zp.writestr("background.js", background_js)
return plugin_path
PhantomJS
PhantomJS(IP白名单)
使用提示
- 运行环境要求: python2.x
- socks5代理网页均可适用
- 使用此样例需要安装selenium、PhantomJS
- PhantomJS可以直接使用pip安装
# -*- coding: utf-8 -*-
'''
使用selenium下的无窗口浏览器phantomjs的socks5白名单免登录示例
因为是无窗口浏览器,所以截了一张图片放在本程序当前目录下
打印出访问网址的title和网页源码
'''
from selenium import webdriver
#要访问的目标网页
page_url = "http://dev.kdlapi.com/testproxy"
#代理服务器ip和端口
proxy = '59.38.241.25:23918'
#代理参数设置
service_args = [
'--proxy=%s' % proxy,
'--proxy-type=socks5',
#'--proxy-auth=%s:%s' %(username,password)
]
#启动PhantomJS
driver = webdriver.PhantomJS(service_args = service_args)
#打出网页title和网页源代码
print driver.title
print driver.page_source
#退出PhantomJS
driver.quit()
PhantomJS(用户名密码认证)
使用提示
- 运行环境要求 python2.x
- socks5代理http/https网页均可适用
- 使用此样例需要安装selenium、PhantomJS
- PhantomJS可以直接使用pip安装
# -*- coding: utf-8 -*-
'''
使用selenium下的无窗口浏览器phantomjs的socks5认证代理示例
可以打印了访问网址的title和源代码
'''
from selenium import webdriver
#要访问的目标网页
page_url = "http://dev.kdlapi.com/testproxy"
#代理服务器ip和端口
ip = '59.38.241.25:23918'
#用户名和密码(私密代理/独享代理)
username = 'myusername'
password = 'mypassword'
#代理参数设置
service_args = [
'--proxy=%s' % ip,
'--proxy-type=socks5',
'--proxy-auth=%s:%s' %(username,password)
]
#启动PhantomJS
driver = webdriver.PhantomJS(service_args = service_args)
#访问网址
driver.get(page_url)
#打出网页title和网页源代码
print driver.title
print driver.page_source
#退出PhantomJS
driver.quit()
Python3
requests
requests请求网页
使用提示
- http/https网页均可适用
- 运行环境要求:requests >= 2.10.0
- socks支持是requests的额外特性,需要安装才能使用:
pip install requests[socks]
```python
"""使用requests请求socks代理服务器
请求http和https网页均适用
"""
"""使用requests请求socks代理服务器,需要安装pysocks库:pip install pysocks
请求http和https网页均适用
"""
import requests import random # 要访问的目标网页 page_url = "https://dev.kdlapi.com/testproxy" # API接口,提示:代理类型请勾选socks4/socks5,返回格式勾选json api_url = "" # API 接口返回的ip, 返回格式为json ip_list = requests.get(api_url).json()['data']['proxy_list'] # 用户名和密码(私密代理/独享代理) username = "username" password = "password" proxies = { 'http': 'socks5://%s:%s@%s' % (username, password, random.choice(ip_list)), 'https': 'socks5://%s:%s@%s' % (username, password, random.choice(ip_list)), # 提示:如果希望在代理服务器上进行dns解析,把socks5替换成socks5h } headers = { "Accept-Encoding": "gzip", # 使用gzip压缩传输数据让访问更快 } r = requests.get(page_url, proxies=proxies, headers=headers) print(r.status_code) # 获取Response的返回码 if r.status_code == 200: print(r.text) ```
urllib
urllib请求网页
使用提示
- http/https网页均可适用
- 请先安装socks:
pip install pysocks
'
```python
"""使用urllib请求socks5代理服务器
请求http和https网页均适用
"""
"""使用urllib请求socks5代理服务器
请求http和https网页均适用
"""
import urllib.request import socks import zlib import json import random from sockshandler import SocksiPyHandler # 要访问的目标网页 page_url = "https://dev.kdlapi.com/testproxy" # API接口, 返回格式为json api_url = "" # API接口返回的ip response = urllib.request.urlopen(api_url) json_dict = json.loads(response.read().decode('utf-8')) ip_list = json_dict['data']['proxy_list'] # 随机选用一个代理ip proxy_ip, proxy_port = random.choice(ip_list).split(":") proxy_port = int(proxy_port) # 端口是int,不能是str rdns = False # 是否在代理服务器上进行dns查询 # 用户名和密码(私密代理/独享代理) username = "username" password = "password" opener = urllib.request.build_opener(SocksiPyHandler(socks.SOCKS5, proxy_ip, proxy_port, rdns, username, password)) opener.addheaders = [ ("Accept-Encoding", "Gzip"), # 使用gzip压缩传输数据让访问更快 ] r = opener.open(page_url) print(r.code) # 获取Reponse的返回码 content = r.read() content_encoding = r.headers.get_all("Content-Encoding") if content_encoding and "gzip" in content_encoding: print(zlib.decompress(content, 16 + zlib.MAX_WBITS).decode('utf8')) # 有gzip压缩时获取页面内容 else: print(content.decode('utf-8')) # 无gzip压缩时获取页面内容 ```
Java
jdk
IP白名单
使用提示
- http/https网页均可适用
- 运行环境要求 jdk >= 1.6
// 请求socks代理服务器(IP白名单)
// http和https网页均适用
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.util.zip.GZIPInputStream;
public class JavaSocksWhitelist {
public static void main(String[] args) throws IOException {
String proxyIp = "113.74.108.33"; // 代理服务器IP
int proxyPort = 21083; // 代理服务器端口
// 要访问的目标网页
String pageUrl = "http://dev.kuaidaili.com/testproxy";
Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(proxyIp, proxyPort));
URL url = new URL(pageUrl);
HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection(proxy);
httpUrlConnection.setRequestMethod("GET");
httpUrlConnection.setConnectTimeout(5*1000); // 设置超时时间
httpUrlConnection.setRequestProperty("Accept-Encoding", "gzip"); // 添加gzip压缩让数据传输更块
// 发起请求
httpUrlConnection.connect();
// 输出状态码
System.out.println("code: " + httpUrlConnection.getResponseCode());
// 读取返回内容
InputStream inputStream = httpUrlConnection.getInputStream();
String encoding = httpUrlConnection.getContentEncoding();
// 处理gzip压缩
if (encoding.equals("gzip")) inputStream = new GZIPInputStream(inputStream);
String message = getContentFromInputStream(inputStream);
// 输出返回内容
System.out.println(message);
// 关闭输入流和连接
inputStream.close();
httpUrlConnection.disconnect();
}
// 读取输入流中的内容
public static String getContentFromInputStream(InputStream inputStream) throws IOException {
final int bufferSize = 1024;
final char[] buffer = new char[bufferSize];
final StringBuilder out = new StringBuilder();
Reader in = new InputStreamReader(inputStream, "UTF-8");
for (;;) {
int rsz = in.read(buffer, 0, buffer.length);
if (rsz < 0) break;
out.append(buffer, 0, rsz);
}
return out.toString();
}
}
用户名密码认证
使用提示
- http/https网页均可适用
- 运行环境要求 jdk >= 1.6
// 请求socks代理服务器(用户名密码认证)
// http和https网页均适用
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URL;
import java.util.zip.GZIPInputStream;
public class JavaSocksAuth {
public static void main(String[] args) throws IOException {
String proxyIp = "113.74.108.33"; // 代理服务器IP
int proxyPort = 21083; // 代理服务器端口
String username = "yourusername"; // 用户名
String password = "yourpassword"; // 密码
// 要访问的目标网页
String pageUrl = "http://dev.kuaidaili.com/testproxy";
Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(proxyIp, proxyPort));
URL url = new URL(pageUrl);
HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection(proxy);
httpUrlConnection.setRequestMethod("GET");
httpUrlConnection.setConnectTimeout(5*1000); // 设置超时时间
httpUrlConnection.setRequestProperty("Accept-Encoding", "gzip"); // 添加gzip压缩让数据传输更块
// 设置代理认证
Authenticator authenticator = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return (new PasswordAuthentication(username,
password.toCharArray()));
}
};
Authenticator.setDefault(authenticator);
// 发起请求
httpUrlConnection.connect();
// 输出状态码
System.out.println("code: " + httpUrlConnection.getResponseCode());
// 读取返回内容
InputStream inputStream = httpUrlConnection.getInputStream();
String encoding = httpUrlConnection.getContentEncoding();
// 处理gzip压缩
if (encoding.equals("gzip")) inputStream = new GZIPInputStream(inputStream);
String message = getContentFromInputStream(inputStream);
// 输出返回内容
System.out.println(message);
// 关闭输入流和连接
inputStream.close();
httpUrlConnection.disconnect();
}
// 读取输入流中的内容
public static String getContentFromInputStream(InputStream inputStream) throws IOException {
final int bufferSize = 1024;
final char[] buffer = new char[bufferSize];
final StringBuilder out = new StringBuilder();
Reader in = new InputStreamReader(inputStream, "UTF-8");
for (;;) {
int rsz = in.read(buffer, 0, buffer.length);
if (rsz < 0) break;
out.append(buffer, 0, rsz);
}
return out.toString();
}
}
GoLang
标准库
用户名密码认证
使用提示
- http/https网页均可适用
- 请先安装官方net包:
go get golang.org/x/net
'
// 请求socks代理服务器(用户名密码认证)
// http和https网页均适用
package main
import (
"compress/gzip"
"fmt"
"golang.org/x/net/proxy"
"io"
"io/ioutil"
"net/http"
"os"
)
func main() {
// 用户名密码(私密代理/独享代理)
username := "myusername"
password := "mypassword"
auth := proxy.Auth{
User: username,
Password: password,
}
proxy_str := "59.38.241.25:23916"
// 目标网页
page_url := "http://dev.kdlapi.com/testproxy"
// 设置代理
dialer, err := proxy.SOCKS5("tcp", proxy_str, &auth, proxy.Direct)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
// 请求目标网页
client := &http.Client{Transport: &http.Transport{Dial: dialer.Dial}}
req, _ := http.NewRequest("GET", page_url, nil)
req.Header.Add("Accept-Encoding", "gzip") //使用gzip压缩传输数据让访问更快
res, err := client.Do(req)
if err != nil {
// 请求发生异常
fmt.Println(err.Error())
} else {
defer res.Body.Close() //保证最后关闭Body
fmt.Println("status code:", res.StatusCode) // 获取状态码
// 有gzip压缩时,需要解压缩读取返回内容
if res.Header.Get("Content-Encoding") == "gzip" {
reader, _ := gzip.NewReader(res.Body) // gzip解压缩
defer reader.Close()
io.Copy(os.Stdout, reader)
os.Exit(0) // 正常退出
}
// 无gzip压缩, 读取返回内容
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(string(body))
}
}
IP白名单认证
使用提示
- http/https网页均可适用
- 请先安装官方net包:
go get golang.org/x/net
'
// 请求socks代理服务器(已设置IP白名单)
// http和https网页均适用
package main
import (
"compress/gzip"
"fmt"
"golang.org/x/net/proxy"
"io"
"io/ioutil"
"net/http"
"os"
)
func main() {
// 代理服务器
proxy_str := "59.38.241.25:23916"
// 目标网页
page_url := "http://dev.kdlapi.com/testproxy"
// 设置代理
dialer, err := proxy.SOCKS5("tcp", proxy_str, nil, proxy.Direct)
if err != nil {
fmt.Println(err.Error())
os.Exit(1)
}
// 请求目标网页
client := &http.Client{Transport: &http.Transport{Dial: dialer.Dial}}
req, _ := http.NewRequest("GET", page_url, nil)
req.Header.Add("Accept-Encoding", "gzip") //使用gzip压缩传输数据让访问更快
res, err := client.Do(req)
if err != nil {
// 请求发生异常
fmt.Println(err.Error())
} else {
defer res.Body.Close() //保证最后关闭Body
fmt.Println("status code:", res.StatusCode) // 获取状态码
// 有gzip压缩时,需要解压缩读取返回内容
if res.Header.Get("Content-Encoding") == "gzip" {
reader, _ := gzip.NewReader(res.Body) // gzip解压缩
defer reader.Close()
io.Copy(os.Stdout, reader)
os.Exit(0) // 正常退出
}
// 无gzip压缩, 读取返回内容
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(string(body))
}
}
CSharp
HttpToSocks5
HttpToSocks5Proxy
使用提示
- http/https网页均可适用
- HttpToSocks5Proxy是第三方库,请先安装后再运行。
using System;
using System.Net.Http;
using System.IO;
using System.IO.Compression;
using MihaZupan;
namespace httptosocks
{
class Program
{
static void Main(string[] args)
{
// 目标网页
string page_url = "http://dev.kdlapi.com/testproxy";
// 代理服务器
string proxy_ip = "59.38.241.25";
int proxy_port = 23916;
// 用户名密码 <私密代理/独享代理>
string username = "myusername";
string password = "mypassword";
// 设置代理 <开放代理或私密/独享代理&已添加白名单>
// var proxy = new HttpToSocks5Proxy(new[] {
// new ProxyInfo(proxy_ip, proxy_port),
// });
// 设置Socks5代理 <私密/独享代理&未添加白名单>
var proxy = new HttpToSocks5Proxy(new[] {
new ProxyInfo(proxy_ip, proxy_port, username, password),
});
// 请求目标网页
var handler = new HttpClientHandler { Proxy = proxy };
HttpClient httpClient = new HttpClient(handler, true);
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, page_url);
httpRequestMessage.Headers.Add("Accept-Encoding", "Gzip"); // 使用gzip压缩传输数据让访问更快
var httpsGet = httpClient.SendAsync(httpRequestMessage);
var result = httpsGet.Result;
Console.WriteLine((int)result.StatusCode); // 获取状态码
// 解压缩读取返回内容
using (StreamReader reader = new StreamReader(new GZipStream(result.Content.ReadAsStreamAsync().Result, CompressionMode.Decompress))) {
Console.WriteLine(reader.ReadToEnd());
}
}
}
}
Node.js
request-promise
request-promise(IP白名单)
使用提示
- http/https网页均可适用
- 请先安装
request-promise
和socks-proxy-agent
:npm install request-promise socks-proxy-agent
// 引入第三方 `socks-proxy-agent` 模块
const SocksProxyAgent = require('socks-proxy-agent');
// 引入第三方 `request-promise`
const rp = require('request-promise');
// 代理服务器ip和端口
const proxy_ip = '113.74.108.33';
const proxy_port = 21080;
// 设置代理
let proxy = `socks5://${proxy_ip}:${proxy_port}`
let agent = new SocksProxyAgent(proxy);
// 要访问的目标网页
let url = 'http://dev.kuaidaili.com/testproxy';
let options = {
uri: url,
agent: agent,
resolveWithFullResponse: true,
gzip: true, //使用gzip压缩让数据传输更快
headers: {
'User-Agent': 'Request-Promise',
"Proxy-Authorization": auth
}
};
rp(options).then((res)=> {
// 输出状态码
console.log(res.statusCode);
// 输出返回内容 (已自动进行gzip解压缩)
console.log(res.body)
}).catch((err) => {
// 错误处理
console.log("error")
});
request-promise(用户名密码认证)
使用提示
- http/https网页均可适用
- 请先安装
request-promise
和socks-proxy-agent
:npm install request-promise socks-proxy-agent
// 引入第三方 `socks-proxy-agent` 模块
const SocksProxyAgent = require('socks-proxy-agent');
// 引入第三方 `request-promise`
const rp = require('request-promise');
// 用户名密码, 若已添加白名单则不需要添加
const username = 'yourusername';
const password = 'yourpassword';
// 代理服务器ip和端口
const proxy_ip = '113.74.108.33';
const proxy_port = 21080;
// 设置代理
let proxy = `socks5://${username}:${password}@${proxy_ip}:${proxy_port}`
let agent = new SocksProxyAgent(proxy);
// 要访问的目标网页
let url = 'http://dev.kuaidaili.com/testproxy';
let options = {
uri: url,
agent: agent,
resolveWithFullResponse: true,
gzip: true, //使用gzip压缩让数据传输更快
headers: {
'User-Agent': 'Request-Promise'
}
};
rp(options).then((res)=> {
// 输出状态码
console.log(res.statusCode);
// 输出返回内容 (已自动进行gzip解压缩)
console.log(res.body)
}).catch((err) => {
console.log("error")
});
Puppeteer
Puppeteer(IP白名单)
使用提示
- http/https网页均可适用
- 运行环境要求: node7.6.0或以上 + puppeteer
- 请先安装puppeteer:
npm i puppeteer
puppeteer
模块的socks
代理暂不支持用户名密码的方式验证身份
// 引入puppeteer模块
const puppeteer = require('puppeteer');
// 要访问的目标网页
const url = 'http://dev.kuaidaili.com/testproxy';
// 添加headers
const headers = {
'Accept-Encoding': 'gzip'
};
// 代理服务器ip和端口
let proxy_ip = '223.198.230.41'
let proxy_port = 19732
(async ()=> {
// 新建一个浏览器实例
const browser = await puppeteer.launch({
headless: false, // 是否不显示窗口, 默认为true, 设为false便于调试
args: [
`--proxy-server=socks5://${proxy_ip}:${proxy_port}`,
'--no-sandbox',
'--disable-setuid-sandbox'
]
});
// 打开一个新页面
const page = await browser.newPage();
// 设置headers
await page.setExtraHTTPHeaders(headers);
// 访问目标网页
await page.goto(url);
})();
Ruby
socksify
socksify(IP白名单)
使用提示
- http/https网页均可适用, IP白名单认证
- 请先安装socksify:
gem install socksify
require 'socksify/http' # 引入socksify/http模块
# 要访问的目标网页, 以快代理testproxy页面为例
page_url = "https://dev.kuaidaili.com/testproxy"
uri = URI(page_url)
# 代理服务器ip和端口
proxy_ip = '42.49.11.109'
proxy_port = 21080
# 新建socks代理实例
proxy = Net::HTTP.SOCKSProxy(proxy_ip, proxy_port)
# 创建新的请求对象
req = Net::HTTP::Get.new(uri)
# 设置User-Agent
req['User-Agent'] = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
req['Accept-Encoding'] = 'gzip' # 使用gzip压缩传输数据让访问更快
# 使用代理发起请求, 若访问的是http网页, 请将use_ssl设为false
res = proxy.start(uri.hostname, uri.port, :use_ssl => true) do |http|
http.request(req)
end
# 输出状态码
puts "status code: #{res.code}"
# 输出响应体
if res.code.to_i != 200 then
puts "page content: #{res.body}"
else
gz = Zlib::GzipReader.new(StringIO.new(res.body.to_s))
puts "page content: #{gz.read}"
end
socksify(用户名密码认证)
使用提示
- http/https网页均可适用, 用户名密码认证
- 请先安装socksify:
gem install socksify
# -*- coding: utf-8 -*-
require 'net/http' # 引入内置net/http模块
require 'zlib'
require 'stringio'
# 代理服务器ip和端口
proxy_ip = '42.49.11.109'
proxy_port = 16816
# 用户名密码
username = 'yourusername'
password = 'yourpassword'
# 要访问的目标网页, 以快代理testproxy页面为例
page_url = "https://dev.kuaidaili.com/testproxy"
uri = URI(page_url)
# 新建代理实例
proxy = Net::HTTP::Proxy(proxy_ip, proxy_port, username, password)
# 创建新的请求对象
req = Net::HTTP::Get.new(uri)
# 设置代理用户名密码认证
req.basic_auth(username, password)
# 设置User-Agent
req['User-Agent'] = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
req['Accept-Encoding'] = 'gzip' # 使用gzip压缩传输数据让访问更快
# 使用代理发起请求, 若访问的是http网页, 请将use_ssl设为false
res = proxy.start(uri.hostname, uri.port, :use_ssl => true) do |http|
http.request(req)
end
# 输出状态码
puts "status code: #{res.code}"
# 输出响应体
if res.code.to_i != 200 then
puts "page content: #{res.body}"
else
gz = Zlib::GzipReader.new(StringIO.new(res.body.to_s))
puts "page content: #{gz.read}"
end