数据抓取使用HTTP代理ip代码示例

故事扮演 提交于 2019-12-05 19:18:16

HTTP Proxy Demo 代码

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)

    }

}

提取代理IP连接:https://v.duoip.cn/customer/signup/?sale=xujinyang1991

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!