HTTP Proxy Demo 代码——华科云商

灰太狼_68a3 · · 187 次点击 · · 开始浏览    

日常应用中使用过很多次代理,主要停留在配置级别。

针对现在大数据公司来说,数据抓取对HTTP代理的应用就显得更为广泛,那么HTTP Proxy Demo具体有哪些示例?

为了加深对http协议,代理模式的理解。咱么就以华科云商HTTP代理为列,详细讲解各种代码运用方式。

代理官网:https://v.duoip.cn/customer/signup/?sale=xujinyang1991

1、Python

    #! -*- encoding:utf-8 -*-

    import requests

    # 要访问的目标页面

    targetUrl = "http://ip.hahado.cn/ip"

    # 代理服务器

    proxyHost = "ip.hahado.cn"

    proxyPort = "39010"

    # 代理隧道验证信息

    proxyUser = "username"

    proxyPass = "password"

    proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {

        "host" : proxyHost,

        "port" : proxyPort,

        "user" : proxyUser,

        "pass" : proxyPass,

    }

    proxies = {

        "http"  : proxyMeta,

        "https" : proxyMeta,

    }

    resp = requests.get(targetUrl, proxies=proxies)

    print resp.status_code

    print resp.text


2、C Sharp

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://ip.hahado.cn/ip");

    WebProxy myProxy = new WebProxy();

    Uri newUri = new Uri("http://ip.hahado.cn:39010");

    myProxy.Address = newUri;

    myProxy.Credentials = new NetworkCredential("username", "password");

    request.Proxy = myProxy;


3、PHP

    // 要访问的目标页面

    $targetUrl = "http://ip.hahado.cn/ip";

    //$targetUrl = "http://ip.hahado.cn/switch-ip";

    //$targetUrl = "http://ip.hahado.cn/current-ip";

    // 代理服务器

    define("PROXY_SERVER", "ip.hahado.cn:39010");

    // 隧道身份信息

    define("PROXY_USER", "username");

    define("PROXY_PASS", "password");

    $proxyAuth = base64_encode(PROXY_USER . ":" . PROXY_PASS);

    $headers = implode("\r\n", [

        "Proxy-Authorization: Basic {$proxyAuth}",

        "Proxy-Switch-Ip: yes",

    ]);

    $options = [

        "http" => [

            "proxy"  => $proxyServer,

            "header" => $headers,

            "method" => "GET",

        ],

    ];

    $context = stream_context_create($options);

    $result = file_get_contents($url, false, $context);

    var_dump($result);


4、JAVA

    import java.io.ByteArrayOutputStream;

    import java.io.InputStream;

    import java.net.Authenticator;

    import java.net.HttpURLConnection;

    import java.net.InetSocketAddress;

    import java.net.PasswordAuthentication;

    import java.net.Proxy;

    import java.net.URL;

    class ProxyAuthenticator extends Authenticator {

        private String user, password;

        public ProxyAuthenticator(String user, String password) {

            this.user    = user;

            this.password = password;

        }

        protected PasswordAuthentication getPasswordAuthentication() {

            return new PasswordAuthentication(user, password.toCharArray());

        }

    }

    /**

    * 注意:下面代码仅仅实现HTTP请求链接,每一次请求都是无状态保留的,仅仅是这次请求是更换IP的,如果下次请求的IP地址会改变

    * 如果是多线程访问的话,只要将下面的代码嵌入到你自己的业务逻辑里面,那么每次都会用新的IP进行访问,如果担心IP有重复,

    * 自己可以维护IP的使用情况,并做校验。

    */

    public class ProxyDemo {

        public static void main(String args[]) throws Exception {

            // 要访问的目标页面

            String targetUrl = "http://ip.hahado.cn/ip";

            //String targetUrl = "http://ip.hahado.cn/switch-ip";

            //String targetUrl = "http://ip.hahado.cn/current-ip";

            // 代理服务器

            String proxyServer = "ip.hahado.cn";

            int proxyPort      = 39010;

            // 代理隧道验证信息

            String proxyUser  = "username";

            String proxyPass  = "password";

            try {

                URL url = new URL(targetUrl);

                Authenticator.setDefault(new ProxyAuthenticator(proxyUser, proxyPass));

                // 创建代理服务器地址对象

                InetSocketAddress addr = new InetSocketAddress(proxyServer, proxyPort);

                // 创建HTTP类型代理对象

                Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);

                // 设置通过代理访问目标页面

                HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy);

                // 设置IP切换头

                connection.setRequestProperty("Proxy-Switch-Ip","yes");

                // 解析返回数据

                byte[] response = readStream(connection.getInputStream());

                System.out.println(new String(response));

            } catch (Exception e) {

                System.out.println(e.getLocalizedMessage());

            }

        }

        /**

        * 将输入流转换成字符串

        *

        * @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();

        }

    }


5、golang

    package main

    import (

        "net/url"

        "net/http"

        "bytes"

        "fmt"

        "io/ioutil"

    )

    const ProxyServer = "ip.hahado.cn:39010"

    type ProxyAuth struct {

        License string

        SecretKey string

    }

    func (p ProxyAuth) ProxyClient() http.Client {

        proxyURL, _ := url.Parse("http://" + p.License + ":" + p.SecretKey + "@" + ProxyServer)

        return http.Client{Transport: &http.Transport{Proxy:http.ProxyURL(proxyURL)}}

    }

    func main()  {

        targetURI := "http://ip.hahaod.cn/ip"

        //targetURI := "http://ip.hahaod.cn/switch-ip"

        //targetURI := "http://ip.hahaod.cn/current-ip"

        // 初始化 proxy http client

        client := ProxyAuth{License: "username", SecretKey: "password"}.ProxyClient()

        request, _ := http.NewRequest("GET", targetURI, bytes.NewBuffer([] byte(``)))

        // 切换IP (只支持 HTTP)

        request.Header.Set("Proxy-Switch-Ip", "yes")

        response, err := client.Do(request)

        if err != nil {

            panic("failed to connect: " + err.Error())

        } else {

            bodyByte, err := ioutil.ReadAll(response.Body)

            if err != nil {

                fmt.Println("读取 Body 时出错", err)

                return

            }

            response.Body.Close()

            body := string(bodyByte)

            fmt.Println("Response Status:", response.Status)

            fmt.Println("Response Header:", response.Header)

            fmt.Println("Response Body:\n", body)

        }

    }

更多资讯请联系企鹅:56731523

本文来自:简书

感谢作者:灰太狼_68a3

查看原文:HTTP Proxy Demo 代码——华科云商

入群交流(和以上内容无关):Go中文网 QQ 交流群:798786647 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

187 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传