本文档包含编程请求socks代理服务器的代码样例,供开发者参考。

代码样例使用说明

  1. 代码样例不能直接运行,因为代码中的订单号9266892014xxxxx、代理服务器59.38.241.25:23918、用户名username、密码password都是虚构的,请替换成您自己的信息。
  2. 代码样例正常运行所需的运行环境和注意事项在样例末尾均有说明,使用前请仔细阅读。
  3. 使用代码样例过程中遇到问题请,我们会为您提供尊龙现金一下的技术支持。

python3

requests

requests(推荐)

使用提示

  • http/https网页均可适用
  • 运行环境要求:requests >= 2.10.0
  • socks支持是的额外特性,需要安装才能使用: pip install requests[socks]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
使用requests请求代理服务器
请求http和https网页均适用
"""
import requests
# 提取代理api接口,获取1个代理ip
api_url = "http://dps.kdlapi.com/api/getdps/?orderid=9266892014xxxxx&num=1&pt=2&sep=1"
# 获取api接口返回的代理ip
proxy_ip = requests.get(api_url).text
# 用户名密码认证(私密代理/独享代理)
username = "username"
password = "password"
proxies = {
    "http": "socks5://%(user)s:%(pwd)s@%(proxy)s/" % {"user": username, "pwd": password, "proxy": proxy_ip},
    "https": "socks5://%(user)s:%(pwd)s@%(proxy)s/" % {"user": username, "pwd": password, "proxy": proxy_ip}
}
# 白名单方式(需提前设置白名单)
# proxies = {
#     "http": "socks5://%(proxy)s/" % {"proxy": proxy_ip},
#     "https": "socks5://%(proxy)s/" % {"proxy": proxy_ip}
# }
# 要访问的目标网页
target_url = "https://dev.kdlapi.com/testproxy"
# 使用代理ip发送请求
response = requests.get(target_url, proxies=proxies)
# 获取页面内容
if response.status_code == 200:
    print(response.text)

python2

requests

requests(推荐)

使用提示

  • http/https网页均可适用
  • 运行环境要求:requests >= 2.10.0
  • socks支持是的额外特性,需要安装才能使用: pip install requests[socks]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
使用requests请求代理服务器
请求http和https网页均适用
"""
import requests
# 提取代理api接口,获取1个代理ip
api_url = "http://dps.kdlapi.com/api/getdps/?orderid=9266892014xxxxx&num=1&pt=2&sep=1"
# 获取api接口返回的代理ip
proxy_ip = requests.get(api_url).text
# 用户名密码认证(私密代理/独享代理)
username = "username"
password = "password"
proxies = {
    "http": "socks5://%(user)s:%(pwd)s@%(proxy)s/" % {"user": username, "pwd": password, "proxy": proxy_ip},
    "https": "socks5://%(user)s:%(pwd)s@%(proxy)s/" % {"user": username, "pwd": password, "proxy": proxy_ip}
}
# 白名单方式(需提前设置白名单)
# proxies = {
#     "http": "socks5://%(proxy)s/" % {"proxy": proxy_ip},
#     "https": "socks5://%(proxy)s/" % {"proxy": proxy_ip}
# }
# 要访问的目标网页
target_url = "https://dev.kdlapi.com/testproxy"
# 使用代理ip发送请求
response = requests.get(target_url, proxies=proxies)
# 获取页面内容
if response.status_code == 200:
    print response.text

python-selenium

chrome

chrome(ip白名单,推荐)

使用提示

  1. 基于白名单方式使用selenium chrome认证代理
  2. 运行环境要求python2/3 selenium chrome chromedriver windows/linux/macos
  3. (注意chromedriver版本要和chrome版本对应)
  4. selenium不是python原生库,需要安装才能使用:pip install selenium
  5. 请注意替换代码中的部分信息:
    ${ip:port}:代理ip:端口号,如:"59.38.241.25:23918"
    ${chromedriver_path}:您本机chromedriver驱动存放路径,如:"c:\chromedriver.exe"
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
chrome_options = webdriver.chromeoptions()
chrome_options.add_argument('--proxy-server=socks5://${ip:port}')  # 代理ip:端口号
# ${chromedriver_path}: chromedriver驱动存放路径
driver = webdriver.chrome(executable_path="${chromedriver_path}", chrome_options=chrome_options)
driver.get("https://dev.kdlapi.com/testproxy")
# 获取页面内容
print(driver.page_source)
# 延迟3秒后关闭当前窗口,如果是最后一个窗口则退出
time.sleep(3)
driver.close()
chrome(不支持用户名密码认证)

使用提示

  • ,因此selenium也无法支持,请使用ip白名单进行认证

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 = "59.38.241.25"; // 代理服务器ip
        int proxyport = 23918;  // 代理服务器端口
        // 要访问的目标网页
        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 = "59.38.241.25"; // 代理服务器ip
        int proxyport = 23918;  // 代理服务器端口
        // 用户名密码认证(私密代理/独享代理)
        string username = "username";  // 用户名
        string password = "password"; // 密码
        // 要访问的目标网页
        string pageurl = "http://dev.kuaidaili.com/testproxy";
        //确保使用用户名密码鉴权正常运行
        system.setproperty("jdk.http.auth.tunneling.disabledschemes", "");
        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 := "username"
    password := "password"
    auth := proxy.auth{
        user:     username,
        password: password,
    }
    proxy_str := "59.38.241.25:23918"
    // 目标网页
    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:23918"
    // 目标网页
    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网页均可适用
  • 是第三方库,请先安装后再运行。
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 = 23918;
            // 用户名密码认证(私密代理/独享代理)
            string username = "username";
            string password = "password";
            // 设置代理 (开放代理或私密/独享代理&已添加白名单)
            // 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-promisesocks-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 = '59.38.241.25';
const proxy_port = 23918;
// 设置代理
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-promisesocks-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 = 'username';
const password = 'password';
// 代理服务器ip和端口
const proxy_ip = '59.38.241.25';
const proxy_port = 23918;
// 设置代理
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 = '59.38.241.25'
let proxy_port = 23918
(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 = '59.38.241.25'
proxy_port = 23918
# 新建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 = '59.38.241.25'
proxy_port = 23918
# 用户名密码认证(私密代理/独享代理)
username = 'username'
password = 'password'
# 要访问的目标网页, 以快代理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
联系尊龙人生就是搏
  • 售前在线咨询
    咨询享免费测试,专业工程师提供尊龙现金一下的技术支持
  • 客服热线
     周一至周六 9:00-18:00
  • 提交工单
    您的每一次反馈我们都认真对待
  • 客服微信 & qq
    客服微信:,客服qq:
  • 企业客户通道
    提交需求后专业的售前工程师为您提供服务