Test4.java 6.2 KB

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