HTTP隧道代理(动态转发)

统一入口,随机动态出口,每一个请求一个随机IP。

产品说明

无须切换IP,连接上我们的代理服务器后,每一个请求都是一个随机IP,按并发数/转发数计费。

云服务器

地址:transfer.mogumiao.com , 端口:9001

隧道验证方式

第一种:请求头验证。通过『Proxy-Authorization』协议头跟随请求一起发出。为便于部分语言进行接入,平台亦支持通过『Authorization』协议头进行隧道身份验证。(首选此方法)

第二种:账号密码验证。隧道代理相对应的账号密码请在订单列表查看。

服务接入步骤

* 在蘑菇代理网站购买隧道代理产品后,在个人中心有订单生成

* 复制隧道代理订单的appKey,设置成协议头『Proxy-Authorization』或者『Authorization』的值。

* 在程序代码中使用,需要发出的请求都将包含如下格式的 HTTP 协议头信息(下面示例中的:“cmFuZG9tOnJhbmRvba” 是个人中心的订单那的appKey): 例如: Proxy-Authorization: Basic cmFuZG9tOnJhbmRvba

* 目标站为HTTPS的时候,需要忽略证书和禁止重定向,在状态码为301/302的时候,取出header中的location,拼成新的url再重新请求

常见错误码

错误码
提示信息
解释说明
401
No Proxy-Authorization or Authorization can be found
请设置请求头Proxy-Authorization或者Authorization或者通过账号密码验证。
407
Access concurrency over restrictions
超过并发限制,请降低频率
407
The number of visits has been used up
隧道按量数量用尽
407
No order can be found
检查传入的appkey是否正确
407
order expire
订单过期
407
order abnormal
订单异常
403
403 forbidden
目标网站返回,请检查请求头参数伪装是否随机,例如user-agent, cookie等参数。
502
超时,连接拒绝等
502比例低于20%均为正常,一般情况下做异常处理重新请求即可

示例代码

      
  import java.io.ByteArrayOutputStream;
  import java.io.InputStream;
  import java.net.HttpURLConnection;
  import java.net.InetSocketAddress;
  import java.net.Proxy;
  import java.net.URL;

  public class ProxyTest {
      public static void main(String args[]) throws Exception {
      // 要访问的目标页面
      // String targetUrl = "http://www.baidu.com";
      String targetUrl = "http://2018.ip138.com/ic.asp";

      // 代理服务器
      String proxyServer = "transfer.mogumiao.com";
      int proxyPort      = 9001;
      
      // 隧道代理订单appKey(请注意替换)
      String appKey  = "cmFuZG9tOnJhbmRvba==";

      try {
          URL url = new URL(targetUrl);
          // 创建代理服务器地址对象
          InetSocketAddress addr = new InetSocketAddress(proxyServer, proxyPort);
          // 创建HTTP类型代理对象
          Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);

          // 设置通过代理访问目标页面
          HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy);
          // 设置协议头 (下面的必带,其他的可以自定义,根据自己的需求决定)
          connection.setRequestProperty("Proxy-Authorization","Basic "+ appKey);
          // 解析返回数据
          byte[] response = readStream(connection.getInputStream());

          System.out.println(new String(response));
      } catch (Exception e) {
          e.printStackTrace();
      }
  }

  /**
   * 将输入流转换成字符串
   *
   * @param inStream
   * @return
   * @throws Exception
   */
  public static byte[] readStream(InputStream inStream) throws Exception {
      ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
      byte[] buffer = new byte[1024];
      int len = -1;

      while ((len = inStream.read(buffer)) != -1) {
          outSteam.write(buffer, 0, len);
      }
      outSteam.close();
      inStream.close();

      return outSteam.toByteArray();
  }
  }   
    
在线客服
微信