帮助文档>操作指南>调试方式 > 代码示例--隧道代理

代码示例--隧道代理

发布时间:2022-07-01 17:00

1.隧道示例使用说明

(1). 代码样例不能直接运行,因为代码中的隧道服务器域名tunne11.jinyao.net、端口号16519、用户名AuthKey、密码password都是虚构的,请替换成您自己的信息,可在隧道业务详情页中查看。查看我的隧道信息>>

(2). 隧道代理不需要使用API链接等其他方式获取代理IP,所有请求将在隧道服务器上进行切换IP并转发。

(3). 建议关闭HTTP协议的keep-alive功能,避免因连接复用导致隧道不能切换IP。

(4). 使用代码样例过程中遇到问题请联系售后客服,我们会为您提供技术支持。

2.代码示例—C#

此代码适用.NET 5.0 and .NET Core

此示例通过WebProxy进行代理设置,并通过HttpWebResquest发送请求。

下面的代码需要用到命名空间 System.Net、System.Text、System.IO,请先引入命名空间

此代码以http和https代理为例。

  1. using System;
  2. using System.Net;
  3. using System.Text;
  4. using System.IO;
  5. namespace proxy_demo
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. sendRequest("[https://myip.ipip.net](https://myip.ipip.net/)", SetProxy());
  12. }
  13. private static void sendRequest(String urlStr, WebProxy proxyObj)
  14. {
  15. try
  16. {
  17. // 设置Http/https请求
  18. HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(urlStr);
  19. httpRequest.Method = "GET";
  20. httpRequest.Credentials = CredentialCache.DefaultCredentials;
  21. // 在发起HTTP请求前将proxyObj赋值给HttpWebRequest的Proxy属性
  22. httpRequest.Proxy = proxyObj;
  23. // 抓取响应返回的页面数据
  24. HttpWebResponse res = (HttpWebResponse)httpRequest.GetResponse();
  25. StreamReader reader = new StreamReader(res.GetResponseStream(),System.Text.Encoding.UTF8);
  26. string content = reader.ReadToEnd();
  27. reader.Close();
  28. Console.WriteLine("{0}", content);
  29. }
  30. catch (Exception e)
  31. {
  32. Console.WriteLine(e.ToString());
  33. }
  34. }
  35. private static WebProxy SetProxy()
  36. {
  37. WebProxy proxy = new WebProxy();
  38. try
  39. {
  40. // 设置代理属性WebProxy
  41. string server = @"tunnel2.qg.net:18519"; //隧道服务器地址
  42. string proxyUser = @"4B2AF3A6"; //密钥
  43. string proxyPass = @"D95133B9A167"; //密码
  44. proxy.Address = new Uri(string.Format("http://{0}/",server));
  45. proxy.Credentials = new System.Net.NetworkCredential(proxyUser, proxyPass); //如使用白名单方式连接,可注释此行
  46. Console.WriteLine("隧道服务器连接成功:{0}", server);
  47. return proxy;
  48. }
  49. catch (NullReferenceException e)
  50. {
  51. Console.WriteLine("隧道服务器连接失败,请检查隧道服务器地址、密钥账号、密码是否有误。" e.ToString());
  52. }
  53. return proxy;
  54. }
  55. }
  56. }

运行结果:

  1. {"errorcode":-46628,"errormsg":"htm file not exist, retcode:-21006"}

3.代码示例—PHP

以下示例适用于php5及php7

3.1 库

下面的代码需要用到php的curl库,请预先安装并开启

3.2 代码

  1. $url = 'https://httpbin.org/get';
  2. //获取到的隧道地址和端口
  3. $proxy = 'tunnel2.qg.net:18519';
  4. //用户的key和密码,使用账密模式访问隧道代理的时候用到。如果使用IP白名单模式,请注释掉下行
  5. $proxyauth = 'key:passwd';
  6. $ch = curl_init();
  7. curl_setopt($ch, CURLOPT_URL, $url);
  8. //设置代理
  9. curl_setopt($ch, CURLOPT_PROXY, $proxy);
  10. //使用账密模式访问代理时设置账密。如果使用IP白名单模式,请注释掉下行
  11. curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
  12. //设置使用的代理类型,当前为socks5类型,如果不设置,默认为http/https类型
  13. curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
  14. if ( ! $res = curl_exec($ch))
  15. {
  16. trigger_error(curl_error($ch));
  17. }
  18. curl_close($ch);
  19. echo $res;

4.代码示例-Python

以下示例适用于python2 及 python3

4.1 库

进行http请求,我们一般使用requests库,该库支持http/https代理。 安装如下

  1. pip install requests

如果需要使用socks5代理,可以安装支持socks的版本

  1. pip install 'requests[socks]'

4.2 代码

下面以使用socks5代理为例

  1. python
  2. import requests
  3.  
  4. proxyHost = "tunnel2.qg.net" #获取隧道服务器地址
  5. proxyPort = "18519" #获取隧道服务器端口
  6. key = "key" #用户key
  7. passwd = "123456" #用户密码
  8.  
  9. # 账密模式
  10. proxy = 'socks5://{}:{}@{}:{}'.format(key, passwd, proxyHost, proxyPort)
  11. # 如果使用IP白名单模式,请用下行替换上一行
  12. # proxy = 'socks5://{}:{}'.format(proxyHost, proxyPort)
  13.  
  14. proxies = {
  15. "http": proxy,
  16. "https": proxy
  17. }
  18.  
  19. response = requests.get("https://httpbin.org/get", proxies=proxies)
  20. print(response.text)

如果想使用http/https代理,请修改接入代理的协议,如下

  1. # 账密模式
  2. proxy = 'http://{}:{}@{}:{}'.format(key, passwd, proxyHost, proxyPort)
  3. # 如果使用IP白名单模式,请用下行替换上一行
  4. # proxy = 'http://{}:{}'.format(proxyHost, proxyPort)
本文导读