/**
* https://proxy.seofangfa.com/
* 【亲测好用!】2022-04-18 21:13:41最新免费代理IP 1395个
* 免费代理IP项目初衷
* 做SEO项目的时候需要定时给客户网站批量查收录、排名等数据,如果是少量还没问题,大量的话,很容易被百度封IP、出验证码,造成程序效率低下,于是走上了寻找代理IP这条路。 一开始也用过市面上的付费代理IP,名字就不提了,百度能搜索到的基本上都用过,但是他们IP要么存活率低,要么价格不便宜,于是萌生了自己寻找代理IP的念头。
*
* 项目简介
* 2022年最新可用的免费代理IP,每5分钟重新验证一次,包括HTTP代理IP,HTTPS代理IP,SOCKS理IP,QQ代理IP等,本网站所提供的代理IP,均经过了程序严格的两步验证,保证了连接速度和存活率,可用度比较高,目前在实际项目中,轮循处理500万条URL的百度收录查询毫无压力。
*
* 验证方法
* 第一步,先经过代理IP访问http://www.baidu.com,如果连接时间在3秒以内,并且获取百度源代码正常,则认为这是一个有效的代理IP;
* 第二步,再用第一步验证有效的IP去访问淘宝IP位置的API接口,获取该IP的地理位置,如果连接时间在3秒以内,且能正常获取到该IP的地理位置,则认为该代理IP是有效的,最终入库。
*
* 代理IP有什么用
* 简单举几个例子
* 1、隐私保护。使用代理IP就是让你上QQ和网页浏览时不用当心自己的真实IP会被别人知道或被黑客攻击;
* 2、反防采集。比如我们做SEO顾问服务时经常需要给客户批量查关键词排名、文章收录情况等,如果不通过代理IP,搜索引擎很容易屏蔽我们的爬虫程序;
* 3、刷票。很多投票的网页一个IP只允许投票一次,如果我们借助大量代理IP去投票,结果可想而知....
*/
import com.alibaba.fastjson.JSONObject;
import org.jsoup.Connection;
import top.lvzhiqiang.util.CheckSign4Bitget;
import top.lvzhiqiang.util.JsoupUtil;
import java.io.UnsupportedEncodingException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.security.InvalidKeyException;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 爬取网上免费代理IP,搭建自己的Ip池
*/
public class Test4 {
public static void main(String[] args) {
LocalDateTime cTime = LocalDateTime.now().minusSeconds(3);
LocalDateTime endTime = LocalDateTime.now();
System.out.println(Duration.between(cTime, endTime).getSeconds());
Map paramMap = new LinkedHashMap<>();
/*paramMap.put("traderId","b1b5467f8bb73f53ac97");
paramMap.put("pageNo","1");
paramMap.put("pageSize","10");*/
/*paramMap.put("productType", "umcbl");
paramMap.put("startTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime.minusDays(1))));
paramMap.put("endTime", String.valueOf(DateUtils.localDateTimeToMilliseconds(endTime)));
paramMap.put("pageSize", "100");
paramMap.put("clientOid", "1089293404165083137");*/
paramMap.put("symbol", "LEVERUSDT_UMCBL");
paramMap.put("orderId", "1089364238096883714");
String signQueryString = paramMap.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue()).collect(Collectors.joining("&"));
String url = "/api/mix/v1/trace/report/order/currentList";
url = "/api/mix/v1/order/detail";
String s = JSONObject.toJSONString(paramMap);
//JSONObject response = requestApi4Common(url, null, s, JsoupUtil.HTTP_POST, paramMap);
JSONObject response = requestApi4Common(url, signQueryString, null, JsoupUtil.HTTP_GET, paramMap);
System.out.println(response);
}
private static JSONObject requestApi4Common(String requestPath, String signQueryString, String signBody, String httpMethod, Map paramMap) {
String timestamp = String.valueOf(System.currentTimeMillis());
Map basicHeaderMap = new HashMap<>();
basicHeaderMap.put("ACCESS-KEY", "bg_433d37306df0e8901c6d107c6d9e9111");
// 使用base64编码签名(请参阅签名消息)。
basicHeaderMap.put("ACCESS-SIGN", "");
// 您请求的时间戳。
basicHeaderMap.put("ACCESS-TIMESTAMP", "");
// 您在创建API KEY时设置的口令。
basicHeaderMap.put("ACCESS-PASSPHRASE", "7f934f62f2701bee932204580d115228");
// 统一设置为application/json。
basicHeaderMap.put("Content-Type", "application/json");
// 支持多语言, 如:中文(zh-CN),英语(en-US)
basicHeaderMap.put("locale", "zh-CN");
Map headerMap = new HashMap<>();
headerMap.putAll(basicHeaderMap);
try {
String accessSign = CheckSign4Bitget.generate(timestamp, httpMethod, requestPath, signQueryString, signBody, "1fdd0fc2976bea80189ba13710e12825ca3ef6c5e25a0d76fd03f8f6cd4a61d9");
headerMap.put("ACCESS-TIMESTAMP", timestamp);
headerMap.put("ACCESS-SIGN", accessSign);
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
} catch (InvalidKeyException e) {
throw new RuntimeException(e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
try {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 1080));
String mainUrl = "https://api.bitget.com";
String requestUrl = mainUrl + requestPath;
Connection.Response response;
if (httpMethod.equals("POST")) {
response = JsoupUtil.requestBodyJSON(requestUrl, httpMethod, proxy, null, headerMap, paramMap);
} else {
response = JsoupUtil.requestBody(requestUrl, httpMethod, proxy, null, headerMap, paramMap);
}
return JSONObject.parseObject(response.body());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}