前述

这里涉及到的使用场景是将文件简历上传到识别网站的时候,频率过于频繁就会被封,所以添加了代理。所以这里的代理仅限于上传文件类型使用代理,如果是使用代理访问网页,可以查看其他文章或者评论留下问题,我发对应链接。

代理平台选择

测试过大概十几个平台,部分情况汇总如下

阿布云

只有一种隧道代理,没有按量购买的,请求量小的不建议使用;价格不算低的,少量使用不建议,量大的话可以考虑。
可取的:质量还行,曾使用阿布云获取过某网站的数据,无论响应时间还是稳定性上都还可以,截图证明使用情况。

讯代理

质量非常一般;客服就是个垃圾,永远不会好好回复你消息;任意修改你订单的有效期,造成明明买了两年的IP,才过半年就不让你用了,还投诉无门。
可取的:价格便宜,也就这一个了,再便宜也是交学费。

熊猫代理

有些网站挂上这个代理响应会特别慢,不挂代理就嗖嗖的。
可取的:类型比较多,按量和按月都有;客服答复比较积极,虽然也不怎么解决问题。
目前还剩下二十万次左右的没用,有需要的可以联系。

蘑菇代理

截至当日,蘑菇代理已经不再提供购买业务。官网打开就提示:因本公司业务调整,现暂停购买和续费入口。原有订单我们将继续为您服务,如有问题请联系客服。抱歉!
可取的:都不让续费了,之前还能购买少量并发的,现在这个平台不行了。

青果网络

有IP池被用光的情况,某年某月的某一天,公司的数据获取不到了,经过层层筛查,发现是挂上这个代理以后不行,换其他家的就可以。联系客服说是他们的大客户把代理IP都给用光了,需要一周后补充IP池,让耐心等待。一不说替换方案,二不说补偿机制,就让干等着,所以就换了。
可取的:代理种类够用,性价比不错。适合作为备选。
下图是某一天的代理IP使用情况。

其他

其他家的不管是开测试账号还是购买了部分功能,使用起来都不是特别顺,不再推荐了。

代理上传文件

httpclient版本使用的是4.5.13,因为引入的阿里云的包包括了这个,所以没有重复写。比如引入httpmime。 pom文件引入:

     <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.4.0</version></dependency><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.60</version></dependency><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.12.1</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency>

全局设置如下,处理https请求忽略认证的问题。

 private static final String HTTP = "http";private static final String HTTPS = "https";private static SSLConnectionSocketFactory sslsf = null;private static PoolingHttpClientConnectionManager cm = null;private static SSLContextBuilder builder = null;static {System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");try {builder = new SSLContextBuilder();builder.loadTrustMaterial(null, new TrustStrategy() {@Overridepublic boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {return true;}});sslsf = new SSLConnectionSocketFactory(builder.build(),new String[] { "SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2" }, null, NoopHostnameVerifier.INSTANCE);Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create().register(HTTP, new PlainConnectionSocketFactory()).register(HTTPS, sslsf).build();cm = new PoolingHttpClientConnectionManager(registry);cm.setMaxTotal(200);} catch (Exception e) {e.printStackTrace();}}

下面的这个代码就是如何使用代理IP代理了,挂上代理后发送文件请求。

  1. 代理设置了账号和密码,不需要设置的自行去掉
  2. 有获取代理IP的代码,如果是隧道代理可绕过此步
     try {CookieStore store = new BasicCookieStore();CredentialsProvider credsProvider = new BasicCredentialsProvider();credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("代理账号", "代理密码"));CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(cm).setConnectionManagerShared(true).setDefaultCookieStore(store).setDefaultCredentialsProvider(credsProvider).build();String url = Jsoup.connect("https://获取代理IP链接/allocate?Key=代理账号").ignoreContentType(true).method(Method.GET).execute().body();JSONObject json = JSON.parseObject(url);JSONObject obj = json.getJSONArray("Data").getJSONObject(0);String ip = obj.getString("IP");int port = obj.getIntValue("port");System.out.println(Dates.now() + "代理IP " + ip + ":" + port);HttpHost myProxy = new HttpHost(ip, port);RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(30000).setConnectTimeout(30000).setProxy(myProxy).build(); //一定要设置超时时间,不然等一天也不返回MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.addBinaryBody("resume-file", is, ContentType.APPLICATION_OCTET_STREAM, fileName); // is是inputstream输入流,fileName是上传的文件名称HttpEntity multipart = builder.build();HttpPost post = new HttpPost("上传的接口地址");post.setConfig(requestConfig);post.setEntity(multipart);System.out.println(Dates.now() + "文件解析开始上传了");CloseableHttpResponse response = httpclient.execute(post);System.out.println(Dates.now() + "上传完成了");byte[] bResultXml = EntityUtils.toByteArray(response.getEntity());String result = new String(bResultXml, "utf-8");return result;} catch(Exception e) {e.printStackTrace();}

Java如何使用IP代理相关推荐

  1. 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫...

    前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,这样很容易被服务器封IP,因此需要设置IP代理,但又不想花钱买,网上有免费IP代理,但大多都数都是不可 ...

  2. Java实现Ip代理池

    设置Ip代理很多时候都会有用到,尤其是在写爬虫相关项目的时候.虽然自己目前没有接触这种需求,但由于最近比较闲,就写着当作练习吧 爬取代理IP 爬取 关于爬取代理IP,国内首先想到的网站当然是 西刺代理 ...

  3. java中selenium设置chrome浏览器为开发者模式与IP代理

    java中selenium设置chrome浏览器为开发者模式与IP代理 前言 代码 前言 之前为公司写了个爬虫项目,有时候为了绕过网站的反爬机制需要用到ip代理以及设置浏览器为开发者模式,看了一些se ...

  4. java selenium使用阿布云ip代理

    关于java selenium使用阿布云,官网也只有火狐的示例代码而谷歌浏览器的示例根本没有,网上能找到一两篇文章,基本不能使用或许自己根本没有试过. 今天这篇博客来分享一下java selenium ...

  5. nginx反向代理后,java获取真实ip和解决request.getServerName()的问题

    1. nginx.conf的server下增加以下配置 #解决request.getServerName()的问题proxy_set_header Host $host:$server_port;pr ...

  6. java获取真实ip的方法

    在网络中,如果不想被人监听,那么就需要获取 IP地址了,在电脑中我们可以使用到 ip地址获取工具,那么如何在 Java中获取真实的 IP地址呢? 1.首先我们需要先准备一台电脑,然后将电脑进行联网: ...

  7. 太阳动态ip代理为您详解使用代理ip常见的几个关键点及其解决方案

    一个ip支撑不了整个爬虫项目的运营,因此程序员常需要建立代理ip池或者与第三方代理ip软件打交道.作为优质的代理ip服务商,太阳动态ip代理为您详解使用代理ip常见的几个关键点及其解决方案. IP检验 ...

  8. Android10 系统应用wifi连接和静态ip代理设置

    Android10 系统应用wifi连接和静态ip代理设置 如果是Android10或者更新的Android版本wifi开发,本文对你或许有一定的帮助. 文章目录 Android10 系统应用wifi ...

  9. Java基础之——动态代理

    动态代理 文章目录 动态代理 1.动态代理总括 1.1.★ 什么是动态代理 ? 1.2.★ 知道动态代理能做什么 ? 2.什么是代理? 3.★ 使用代理模式的作用 4.代理的分类 5.★代理类的功能 ...

  10. 打造一个属于自己的ip代理工具 ProxyRoot

    起源:前段时间,应一个朋友的委托,想在高考前搞一份往年各大高校对不同地区的文理科分数线,搞一个查询分数的公众号,在爬取网站的数据时由于对网站的请求太频繁,在访问了2000多次后被网站把我的ip 封了, ...

最新文章

  1. 86岁还在录网课:MIT教授Gilbert Strang最新「线性代数」课程上线
  2. STC用PCA测量脉宽_用于相干激光雷达的大能量长脉宽单频激光器 | COL
  3. android开发 获取相册名称_Android开发之获取相册照片和获取拍照照片
  4. 学会骗人,是重要的生存技能!
  5. 使用identity+jwt保护你的webapi(二)——获取jwt token
  6. unity镜头边缘羽化_【后期修图】如何利用Ps中的自适应广角滤波器校正镜头失真?...
  7. lucene索引创建
  8. date加一天php,PHP时间日期操作增减(date strtotime) 加一天 加一月
  9. Linux CA证书与https讲解
  10. CXF 生成Web Service Client(将WSDl 转化成 Java代码)
  11. 清除所有多余的桌面右键菜单
  12. Android模拟器所支持的OpenGL ES扩展
  13. 代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧
  14. orangepi自启动打开一个终端并且运行脚本
  15. 51单片机c语言100例百度云,51单片机C语言编程100例.docx
  16. axure如何导出原件_彻底抛弃WORD!教你用Axure快速输出高质量的PRD
  17. series 锐捷rgrsr20_锐捷RG-RSR20-04E路由器
  18. python调用有道翻译API进行翻译
  19. 服务器如何选择固态硬盘,服务器固态硬盘如何挑选?
  20. python绘制1:1对角线(1:1 line)

热门文章

  1. Navicat连接Oracle
  2. 如何提高FPGA的工作频率
  3. 使用metasploit制作钓鱼网站——browser autopwn攻击
  4. B站(哔哩哔哩)视频免费下载方式
  5. 根据前序序列和中序序列重建二叉树
  6. Siamese 目标跟踪:Learning to Fuse Asymmetric Feature Maps in Siamese Trackers(CVPR2021)
  7. 电源测试之输出动态响应(Output Dynamic Response Test)
  8. R TALK | 旷视研究院范浩强周舒畅: AI计算机摄影的原理、应用与硬件设计
  9. pytorch源码解析1——torch.optim:优化算法接口详解
  10. 聚合支付、第四方支付有哪些平台?