前述

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

代理平台选择

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

阿布云

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

讯代理

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

熊猫代理

有些网站挂上这个代理响应会特别慢,不挂代理就嗖嗖的。
Java如何使用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() {
				@Override
				public 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();
		}
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。