/** * 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); } } }