产品说明

隧道代理提供统一的入口地址,用户成功接入后,每一个请求都是一个随机 IP

隧道代理服务器地址

代理服务器地址为:dyn.horocn.com

代理端口为:50000

示例代码

import java.io.IOException;
import java.net.Authenticator;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;


public class ProxyDemo {
    // 代理隧道验证信息
    private final static String ProxyUser = "隧道代理订单号";
    private final static String ProxyPass = "密码(用户中心-我的订单页面可查)";

    // 代理服务器
    private final static String ProxyHost = "dyn.horocn.com";
    private final static Integer ProxyPort = 50000;

    private static void getUrlProxyContent(String url) {
        Authenticator.setDefault(new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(ProxyUser, ProxyPass.toCharArray());
            }
        });

        System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ProxyHost, ProxyPort));

        try {
            Document doc = Jsoup.connect(url).timeout(3000).proxy(proxy).get();

            if (doc != null) {
                System.out.println(doc.body().html());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        // 要访问的目标页面
        String targetUrl = "https://www.baidu.com";

        getUrlProxyContent(targetUrl);
    }
}

from urllib import request

# 要访问的目标页面
targetUrl = "https://www.baidu.com"

# 代理服务器
proxyHost = "dyn.horocn.com"
proxyPort = "50000"

# 代理隧道验证信息
proxyUser = "隧道代理订单号"
proxyPass = "密码(用户中心-我的订单页面可查)"

proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
    "host": proxyHost,
    "port": proxyPort,
    "user": proxyUser,
    "pass": proxyPass,
}

proxy_handler = request.ProxyHandler({
    "http": proxyMeta,
    "https": proxyMeta,
})

opener = request.build_opener(proxy_handler)

request.install_opener(opener)
resp = request.urlopen(targetUrl).read()

print(resp)
import requests

target_url = "https://www.baidu.com"
proxy_host = 'dyn.horocn.com'
proxy_port = 50000
proxy_username = '隧道代理订单号'
proxy_pwd = "密码(用户中心-我的订单页面可查)"

proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
    "host": proxy_host,
    "port": proxy_port,
    "user": proxy_username,
    "pass": proxy_pwd,
}

proxies = {
    'http': proxyMeta,
    'https': proxyMeta,
}

try:
    resp = requests.get(url=target_url, proxies=proxies)
    print(resp.text)
except Exception as e:
   print e

<?php
// 要访问的目标页面
$targetUrl = "https://www.baidu.com/";

// 代理服务器
$proxyServer = "http://dyn.horocn.com:50000";

// 隧道身份信息
// 这里的用户名,等于订单号
$proxyUser = "隧道代理订单号";
$proxyPass = "密码(用户中心-我的订单页面可查)";

$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, CURLPROXY_HTTP);
curl_setopt($ch, CURLOPT_PROXY, $proxyServer);

// 设置隧道验证信息
curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "{$proxyUser}:{$proxyPass}");


curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);

curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);

curl_close($ch);

var_dump($result);

// 需要安装 request 库
// 使用命令:npm install request
// 仓库地址:https://github.com/request/request
const request = require('request');

var user = "隧道代理订单号"
var password = "密码(用户中心-我的订单页面可查)"
var host = "dyn.horocn.com"
var port = 50000

var proxyUrl = "http://" + user + ":" + password + "@" + host + ":" + port;
var proxiedRequest = request.defaults({'proxy': proxyUrl});

proxiedRequest.get("https://www.baidu.com", function (error, response, body) {
    console.log('error:', error);
    console.log('statusCode:', response && response.statusCode);
    console.log('body:', body);
})

// 要访问的目标页面
string targetUrl = "https://www.baidu.com";

// 代理服务器
string proxyHost = "http://dyn.horocn.com";
string proxyPort = "50000";

// 代理隧道验证信息
string proxyUser = "隧道代理订单号";
string proxyPass = "密码(用户中心-我的订单页面可查)";

// 设置代理服务器
var proxy         = new WebProxy();
proxy.Address     = new Uri(string.Format("{0}:{1}", proxyHost, proxyPort));
proxy.Credentials = new NetworkCredential(proxyUser, proxyPass);

ServicePointManager.Expect100Continue = false;

var request = WebRequest.Create(targetUrl) as HttpWebRequest;

request.AllowAutoRedirect = true;
request.KeepAlive = true;
request.Method    = "GET";
request.Proxy     = proxy;


using (var response = request.GetResponse() as HttpWebResponse)
using (var sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
    string htmlStr = sr.ReadToEnd();
}                


import scrapy
import os

# 中间件使用代理示例:https://github.com/scrapy/scrapy/blob/master/tests/test_downloadermiddleware_httpproxy.py

# 官方 HTTP 代理中间件:https://docs.scrapy.org/en/latest/topics/downloader-middleware.html?highlight=proxy#module-scrapy.downloadermiddlewares.httpproxy


class MyIPSpider(scrapy.Spider):
    name = 'my_ip'

    start_urls = [
        'https://www.baidu.com?v=1',
        'https://www.baidu.com?v=2',
    ]

    def start_requests(self):
        proxyUser = "隧道代理订单号"
        proxyPass = "密码(用户中心-隧道代理订单页面可查)"
        proxyHost = "dyn.horocn.com"
        proxyPort = "50000"

        proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
            "host": proxyHost,
            "port": proxyPort,
            "user": proxyUser,
            "pass": proxyPass,
        }

        for url in self.start_urls:
            req = scrapy.Request(url, meta={'proxy': proxyMeta})
            yield req


    def parse(self, response):
        yield {
            'body': response.text,
        } 
curl --proxy-header "Proxy-Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" --proxy http://dyn.horocn.com:50000 https://www.baidu.com  
package main

import (
    "github.com/parnurzeal/gorequest"
    "log"
    "fmt"
)

func main() {
    // TODO: 请替换下面的身份信息
    // 这里的用户名是隧道代理的订单号
    username := "隧道代理订单号"
    // 密码请到用户中心-我的订单页面查询
    password := "密码(用户中心-我的订单页面可查)"

    request := gorequest.New().
        Proxy(fmt.Sprintf("http://%s:%s@dyn.horocn.com:50000", username, password))

    resp, body, errs := request.
        Get("https://www.baidu.com").
        End()

    if errs != nil {
        log.Printf("出现异常:%s\n", errs)
        return
    }

    log.Printf("状态码:%d\n", resp.StatusCode)
    log.Printf("返回结果:%s\n", body)
}

其他示例代码

注意

  1. Java8以上版本,请在运行的时候,加上-Djdk.http.auth.tunneling.disabledSchemes=""。具体原因请参考:Unable to tunnel through proxy since Java 8 Update 111
  2. 使用 Python requests 第三方 HTTP 网络库的过程中,如果出现 407 身份验证错误,请使用 requests 2.27.1 以上版本。官方做了相关修复。参考:https://github.com/psf/requests/pull/6028

常见错误码

错误码 说明
407 需要身份验证
429 超过并发限制,请降低频率或者使用调整隧道代理套餐
500 内部服务器错误,一般是因为超时或者连接被拒绝造成的。请做好异常处理。