API获取
账号认证获取
教程demo
使用方法:
名称 | 类型 | 必选 | 说明 |
num | int | 是 | 提取IP数量 |
port | int | 否 | 代理协议:1、HTTP/HTTPS;2、SOCKS5 |
regions | string | 否 | 国家代码,eg:美国为us |
foramt | int | 否 | 数据格式:1:TXT 2:JSON 3:HTML |
sep | int | 否 | 分隔符(1:\r\n 2:\r 3:\n 4:\t 5:自定义) |
csep | string | 否 | 自定义分隔符 |
结果返回示例:
{ "code": 0, "success": true, "msg": "0", "data": [ {"ip": "8.8.8.8", "port": 80}, {"ip": "8.8.8.8", "port": 8080} ] }
结果注释:
名称 | 类型 | 说明 | |
ip | string | 是 | ip地址 |
port | int | 否 | 端口号 |
使用方法:
生成API链接,调用HTTP GET请求即可返回所需的IP结果 * 可以直接按照以下格式组装所需的API链接:
提取IP接口:http://api.haiwaiip.cn/?num=1&time=1&format=1&protocol=http&country=&sep=1&csep=&country=us
获取剩余流量接口(单位MB):http://www.haiwaiip.cn/index/user/traffic_info/appid/[APPID]/appkey/[APPKEY].html
添加白名单接口:http://www.haiwaiip.cn/index/user/save_white/appid/[APPID]/appkey/[APPKEY].html?white=您的ip
删除白名单接口:http://www.haiwaiip.cn/index/user/del_white/appid/[APPID]/appkey/[APPKEY].html?white=您的ip
获取白名单接口:http://www.haiwaiip.cn/index/user/white_list/appid/[APPID]/appkey/[APPKEY].html?format=simple
实例:
using System; using System.Net; using System.Net.Http; using System.Collections.Generic; namespace ClientProxyDemo { class TestProxy { static void Main(string[] args) { String proxyServer = "http://xxx:xxx"; // http://host:port, 例(http://1.2.3.4:7777), host可以是域名或者ip,port是代理端口号 var proxy = new WebProxy(proxyServer); HttpClientHandler httpClientHandler = new HttpClientHandler() { Proxy = proxy }; var httpCient = new HttpClient(httpClientHandler); // 增加头部 httpCient.DefaultRequestHeaders.Add("Header-Key", "header-vaule"); TestProxy testProxy = new TestProxy(); testProxy.testGet(httpCient); // testProxy.testPost(httpCient); } // 测试get请求 public void testGet(HttpClient httpClient) { String targetUrl = "http://httpbin.org/get"; var httpResult = httpClient.GetStringAsync(targetUrl).Result; } // 测试post请求 public void testPost(HttpClient httpClient) { String targetUrl = "http://httpbin.org/post"; List> formData = new List >(); formData.Add(new KeyValuePair ("key1", "vaule1")); formData.Add(new KeyValuePair ("key2", "vaule2")); var formContent = new FormUrlEncodedContent(formData.ToArray()); var responseMsg = httpClient.PostAsync(targetUrl, formContent).Result; var httpResult = responseMsg.Content.ReadAsStringAsync().Result; } } }
实例:
package main import ( "fmt" "io/ioutil" "net/http" "net/url" ) //sock5代理 func socksproxy() { urli := url.URL{} urlproxy, _ := urli.Parse("http://测试ip:端口") client := &http.Client{ Transport: &http.Transport{ Proxy: http.ProxyURL(urlproxy), }, } rqt, err := http.NewRequest("GET", "http://myip.top", nil) if err != nil { println("接口获取IP失败!") return } rqt.Header.Add("User-Agent", "Lingjiang") //处理返回结果 response, _ := client.Do(rqt) defer response.Body.Close() body, err := ioutil.ReadAll(response.Body) if err != nil { return } fmt.Println("socks5:", string(body)) return } //http代理 func httpproxy() { urli := url.URL{} urlproxy, _ := urli.Parse("http://测试ip:端口") client := &http.Client{ Transport: &http.Transport{ Proxy: http.ProxyURL(urlproxy), }, } rqt, err := http.NewRequest("GET", "http://myip.top", nil) if err != nil { println("接口获取IP失败!") return } rqt.Header.Add("User-Agent", "Lingjiang") //处理返回结果 response, _ := client.Do(rqt) defer response.Body.Close() body, err := ioutil.ReadAll(response.Body) if err != nil { return } fmt.Println("http:", string(body)) return } //本机IP func httplocal() { client := &http.Client{} rqt, err := http.NewRequest("GET", "http://myip.top", nil) if err != nil { println("接口获取IP失败!") return } rqt.Header.Add("User-Agent", "Lingjiang") //处理返回结果 response, _ := client.Do(rqt) defer response.Body.Close() body, err := ioutil.ReadAll(response.Body) if err != nil { return } fmt.Println("本机:", string(body)) return } func main() { httplocal() httpproxy() socksproxy() }
实例:
Php http/sock5: // 要访问的目标页面 $targetUrl = "http://baidu.com"; // 代理服务器 $proxyServer = "http://ip:port"; // 隧道身份信息 $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, 0); //http curl_setopt($ch, CURLOPT_PROXYTYPE, 5); //sock5 curl_setopt($ch, CURLOPT_PROXY, $proxyServer); // 设置隧道验证信息 curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;)"); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); var_dump($result);
HttpClient:
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; public class ClientProxyHttpClientHttp { // 代理服务器 final static String proxyHost = "xxx"; final static Integer proxyPort = 0; private static HttpHost proxy = null; private static RequestConfig reqConfig = null; static { proxy = new HttpHost(proxyHost, proxyPort, "http"); reqConfig = RequestConfig.custom().setConnectionRequestTimeout(5000).setConnectTimeout(10000) // 设置连接超时时间 .setSocketTimeout(10000) // 设置读取超时时间 .setExpectContinueEnabled(false).setProxy(new HttpHost(proxyHost, proxyPort)) .setCircularRedirectsAllowed(true) // 允许多次重定向 .build(); } public static void main(String[] args) { doGetRequest(); doPostRequest(); } public static void doGetRequest() { // 目标地址 String targetUrl = "http://httpbin.org/get"; try { // 设置url参数 (可选) MapurlParams = new HashMap<>(); urlParams.put("uid", "1234567"); String paramStr = EntityUtils.toString(new UrlEncodedFormEntity(paramsAdapter(urlParams), "UTF-8")); HttpGet httpGet = new HttpGet(targetUrl + "?" + paramStr); String result = doRequest(httpGet); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } public static void doPostRequest() { try { // 要访问的目标页面 HttpPost httpPost = new HttpPost("http://httpbin.org/post"); // 设置表单参数 Map formParams = new HashMap<>(); formParams.put("uid", "1234567"); UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(paramsAdapter(formParams), "utf-8"); httpPost.setEntity(uefEntity); String result = doRequest(httpPost); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } /** * 设置请求头 * * @param httpReq */ private static void setHeaders(HttpRequestBase httpReq) { httpReq.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36"); httpReq.addHeader("xxx", "xxx"); } /** * 执行请求 * * @param httpReq * @return */ public static String doRequest(HttpRequestBase httpReq) { String result = new String(); httpReq.setConfig(reqConfig); try { // 设置请求头 setHeaders(httpReq); CloseableHttpClient httpClient = HttpClients.createDefault(); // 执行请求 CloseableHttpResponse httpResp = httpClient.execute(httpReq); // 保存Cookie // 获取http code int statusCode = httpResp.getStatusLine().getStatusCode(); System.out.println(statusCode); HttpEntity entity = httpResp.getEntity(); if (entity != null) { result = EntityUtils.toString(entity, "utf-8"); } httpResp.close(); httpClient.close(); httpReq.abort(); } catch (Exception e) { e.printStackTrace(); return null; } return result; } /** * 参数适配器,将系统定义的请求参数转换成HttpClient能够接受的参数类型 * * @param params * 系统定义的请求参数 * @return HttpClient要求的参数类型 */ private static List paramsAdapter(Map map) { List nvps = new ArrayList (); for (Entry entry : map.entrySet()) { nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } return nvps; } }
http:
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.Authenticator; import java.net.InetSocketAddress; import java.net.PasswordAuthentication; import java.net.Proxy; import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; /** * * @author librabin * */ public class ClientProxyBasicHttp { public static void main(String args[]) throws Exception { // 目标地址 String targetUrl = "http://httpbin.org/get"; // 代理服务器 String proxyHost = "xxx"; int proxyPort = 0; // http代理: Proxy.Type.HTTP, socks代理: Proxy.Type.SOCKS Proxy.Type proxyType = Proxy.Type.HTTP; // 代理验证 String proxyUser = "xxx"; String proxyPwd = "xxx"; try { // 设置验证 Authenticator.setDefault(new ProxyAuthenticator(proxyUser, proxyPwd)); // 创建代理服务器 InetSocketAddress addr = new InetSocketAddress(proxyHost, proxyPort); Proxy proxy = new Proxy(proxyType, addr); // 访问目标网页 URL url = new URL(targetUrl); URLConnection conn = url.openConnection(proxy); // 读取返回数据 InputStream in = conn.getInputStream(); // 将返回数据转换成字符串 System.out.println(IO2String(in)); } catch (Exception e) { e.printStackTrace(); } } /** * 将输入流转换成字符串 * * @param inStream * @return * @throws IOException */ public static String IO2String(InputStream inStream) throws IOException { ByteArrayOutputStream result = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = inStream.read(buffer)) != -1) { result.write(buffer, 0, len); } String str = result.toString(StandardCharsets.UTF_8.name()); return str; } static class ProxyAuthenticator extends Authenticator { private String authUser, authPwd; public ProxyAuthenticator(String authUser, String authPwd) { this.authUser = authUser; this.authPwd = authPwd; } public PasswordAuthentication getPasswordAuthentication() { return (new PasswordAuthentication(authUser, authPwd.toCharArray())); } } }
socks5:
import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; /** * * @author librabin * */ public class ClientProxyBasicSocks { public static void main(String args[]) throws Exception { // 目标地址 String targetUrl = "http://httpbin.org/get"; // 代理服务器 String proxyHost = "xxx"; int proxyPort = 0; // http代理: Proxy.Type.HTTP, socks代理: Proxy.Type.SOCKS Proxy.Type proxyType = Proxy.Type.SOCKS; try { // 创建代理服务器 InetSocketAddress addr = new InetSocketAddress(proxyHost, proxyPort); Proxy proxy = new Proxy(proxyType, addr); // 访问目标网页 URL url = new URL(targetUrl); URLConnection conn = url.openConnection(proxy); // 读取返回数据 InputStream in = conn.getInputStream(); // 将返回数据转换成字符串 System.out.println(IO2String(in)); } catch (Exception e) { e.printStackTrace(); } } /** * 将输入流转换成字符串 * * @param inStream * @return * @throws IOException */ public static String IO2String(InputStream inStream) throws IOException { ByteArrayOutputStream result = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = inStream.read(buffer)) != -1) { result.write(buffer, 0, len); } String str = result.toString(StandardCharsets.UTF_8.name()); return str; } }
实例:
Python http/sock5: #coding=utf-8 import requests #请求地址 targetUrl = "http://baidu.com" #代理服务器 proxyHost = "ip" proxyPort = "port" proxyMeta = "http://%(host)s:%(port)s" % { "host" : proxyHost, "port" : proxyPort, } #pip install -U requests[socks] socks5代理 # proxyMeta = "socks5://%(host)s:%(port)s" % { # "host" : proxyHost, # "port" : proxyPort, # } proxies = { "http" : proxyMeta, } resp = requests.get(targetUrl, proxies=proxies) print resp.status_code print resp.text
实例:
Python selenium http/socks5: #coding=utf-8 from selenium import webdriver # 代理服务器 proxyHost = "ip" proxyPort = "port" proxyType='http' #socks5 # 代理隧道验证信息 service_args = [ "--proxy-type=%s" % proxyType, "--proxy=%(host)s:%(port)s" % { "host" : proxyHost, "port" : proxyPort, } ] # 要访问的目标页面 targetUrl = "http://baidu.com" driver = webdriver.PhantomJS(service_args=service_args) driver.get(targetUrl) print driver.title print driver.page_source.encode("utf-8") driver.quit()
实例:
//node代理请求http var http = require('http') var opt = { host: 'tunnel.alicloudecs.com',//这里放代理服务器的ip或者域名 port: '500',//这里放代理服务器的端口号 method: 'GET',//这里是发送的方法 path: 'http://www.sdip.321174.com/', //这里是访问的路径 } //以下是接收数据的代码 var body = ''; var req = http.request(opt, function (res) { console.log("Got response: " + res.statusCode); res.on('data', function (d) { body += d; }).on('end', function () { console.log(res.headers) console.log(body) }); }).on('error', function (e) { console.log("Got error: " + e.message); }) req.end(); //node代理请求http/https const fetch = require("node-fetch"); const HttpsProxyAgent = require('https-proxy-agent'); //这里是访问的路径 let url="https://www.baidu.com/s?cl=3&tn=baidutop10&fr=top1000&wd=%E9%AB%98%E8%80%83&rsv_idx=2&rsv_dl=fyb_n_homepage&hisfilter=1"; //这是代理服务器地址 let ip='58.218.205.48'; //这是端口号 let port='500'; fetch(url, { method: 'GET', // body: null, agent: new HttpsProxyAgent("http://" + ip + ":" + port) //<==注意是 `http://` }).then(function (res) { console.log("Response Headers ============ "); res.headers.forEach(function(v,i,a) { console.log(i+" : "+v); }); return res.text(); }).then(function (res) { console.log("Response Body ============ "); console.log(res); });
参数注释:
名称 | 类型 | 必选 | 说明 |
country | string | 否 | 国家代码标识 |
session | string | 否 | 需要固定一个ip时配置,用户自定义,注意:需由1-32位数字组成,不然会断网。 |
使用方法:
·country−指定地区
指定地区 user-sub.[USERNAME]-country-[COUNTRYCODE]:[PASSWORD] country-us 美国 country-jp 日本 示例: # 访问美国 curl --socks5 user-sub.[USERNAME]-country-us:[PASSWORD]@ip:port "http://ip123.in/ip.json" -vv
·session−固定一个出口ip
用于指定想要固定一个出口ip一段时间,用户自定义,一般都可以维持10-30分钟 user-sub.[USERNAME]-session-[SESSIONID]:[PASSWORD] 示例: # 访问美国 固定出口IP curl --socks5 user-sub.[USERNAME]-country-us-session-123456:[PASSWORD]@ip:port "http://ip123.in/ip.json" -vv