1. HttpClient使用代理IP
在爬取网页的时候,有的目标站点有反爬虫机制,对于频繁访问站点以及规则性访问站点的行为,会采集屏蔽IP措施。这时候,代理IP就派上用场了。
关于代理IP的话也分几种透明代理、匿名代理、混淆代理、高匿代理
1) 透明代理(TransparentProxy)
REMOTE_ADDR=ProxyIP
HTTP_VIA=ProxyIP
HTTP_X_FORWARDED_FOR=YourIP
透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以从HTTP_X_FORWARDED_FOR来查到你是谁。
2) 匿名代理(AnonymousProxy)
REMOTE_ADDR=proxyIP
HTTP_VIA=proxyIP
HTTP_X_FORWARDED_FOR=proxyIP
匿名代理比透明代理进步了一点:别人只能知道你用了代理,无法知道你是谁。
还有一种比纯匿名代理更先进一点的:混淆代理。
3) 混淆代理(DistortingProxies)
REMOTE_ADDR=ProxyIP
HTTP_VIA=ProxyIP
HTTP_X_FORWARDED_FOR=RandomIPaddress
如上,与匿名代理相同,如果使用了混淆代理,别人还是能知道你在用代理,但是会得到一个假的IP地址,伪装的更逼真。
4) 高匿代理(Eliteproxy或HighAnonymityProxy)
REMOTE_ADDR=ProxyIP
HTTP_VIA=notdetermined
HTTP_X_FORWARDED_FOR=notdetermined
可以看出来,高匿代理让别人根本无法发现你是在用代理,所以是最好的选择。
一般我们搞爬虫用的都是高匿的代理IP;建议大家用国内代理IP以及主干道网络大城市的代理IP访问速度快;
那代理IP从哪里搞呢很简单百度一下,你就知道一大堆代理IP站点。一般都会给出一些免费的,但是花点钱搞收费接口更加方便;
比如: http://www.66ip.cn/
Demo01.java
package com.andrew.httpClient.chap04;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class Demo01 {
public static void main(String[] args) throws Exception {
CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建httpClient实例
HttpGet httpGet = new HttpGet("http://www.tuicool.com/"); // 创建httpget实例
HttpHost proxy = new HttpHost("221.239.86.26", 32228);
RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
httpGet.setConfig(config);
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0");
CloseableHttpResponse response = httpClient.execute(httpGet); // 执行http get请求
HttpEntity entity = response.getEntity(); // 获取返回实体
System.out.println("网页内容:" + EntityUtils.toString(entity, "utf-8")); // 获取网页内容
response.close(); // response关闭
httpClient.close(); // httpClient关闭
}
}
分享到:
相关推荐
获取网络资源,使用动态代理ip解决单个ip访问次数限制问题
多线程代理IP池,一直看到有关这方面的技术,最近实现了一个。简单的来说,启动后,会一直定时的获取代理ip,并自动检测代理ip的活跃度。运用多线程的技术,在极短的时间内获取大量的ip进行筛选。架构也比较清楚,...
这样,目标服务器只知道请求来自代理服务器,而不知道原始客户端的真实IP地址。 二、C#中的HttpClient类 在C#中,我们可以利用HttpClient类来实现HTTP代理的配置和使用。HttpClient是.NET Framework和.NET Core中...
通过Java网络爬虫爬取指定代理ip网上的ip,利用了jsoup、httpclient技术实现
本文将深入探讨如何使用Java结合Jsoup库来实现代理IP的爬取,以突破IP访问限制,实现动态IP代理。 首先,让我们了解什么是Java爬虫。Java爬虫是使用Java语言编写的一种程序,它能够自动地遍历互联网上的网页,抓取...
4. **反反爬策略**:应对网站的反爬机制,如设置代理IP,处理验证码,调整请求间隔等。 五、总结 HttpClient作为Java网络编程的重要工具,其强大的功能和灵活性使其在网络爬虫开发中扮演了不可或缺的角色。通过...
1. **获取代理IP**:可以使用免费或付费的代理IP服务,或者从互联网上抓取公开的代理IP列表。 2. **验证代理IP**:确保获取的IP是有效的,可以正常工作,可以通过发送HTTP请求并检查响应来验证。 3. **轮换代理IP**...
标题中的“代理IP获取工具_89代理.7z”表明这是一个使用C#语言开发的程序,主要用于获取代理IP地址。在互联网上,代理IP常用于数据爬取、网络安全、匿名浏览等多种用途。C#是一种面向对象的编程语言,由微软公司推出...
6. **编程实现**:使用Python的requests库配合proxy_pool可以实现自动获取和管理IP代理,Java可以使用HttpURLConnection或Apache HttpClient,Node.js则有axios和http-proxy-agent等库。 7. **安全注意事项**:使用...
本项目名为"java-爬取代理IP",显然聚焦于使用Java编程语言编写爬虫程序,目标是获取代理IP地址并将其存储到数据库中,以便后续的项目能够便捷地利用这些代理IP资源。 首先,我们要理解什么是代理IP。代理IP,也叫...
同时,为了避免被目标网站封禁,应合理控制请求频率,并可能需要使用代理IP。 总的来说,HttpClient与Jsoup的结合使用,为Java开发者提供了一套高效、灵活的数据采集解决方案。通过它们,你可以轻松地从网页中获取...
HTTPClient还支持基本认证、代理设置、重试策略以及连接管理等高级功能。 使用HTTPClient库,你可以: 1. 创建HTTP客户端:通过`HttpClientBuilder`类,可以配置各种参数,如连接超时、重试策略等,然后构建`...
HttpClient简化了HTTP通信的复杂性,使得开发者可以更容易地创建复杂的HTTP应用,例如进行网页抓取、Web服务调用或者实现自定义的代理设置。 在实际应用中,通常会同时使用HttpCore和HttpClient。HttpCore作为底层...
此外,考虑到网络爬虫可能面临的反爬策略,还需要处理重试、延时、代理IP等策略。 5. **下载图片** 在“httpclient爬取美图”项目中,获取到图片的URL后,可以使用HttpClient下载图片。首先,创建HttpGet请求,...
5. **反爬虫策略应对**:遇到反爬虫机制时,可以考虑使用代理IP、设置合理的请求头、随机化请求时间间隔等策略。 通过上述方法,结合Jsoup和HttpClient,开发者可以构建出一个能够抓取动态网页内容的爬虫程序。这...
在实际应用中,还可能需要处理反爬虫策略,如设置User-Agent、使用代理IP、模拟登录等。 总结来说,HttpClient 和 HtmlParser(通常指Jsoup)是网络爬虫开发中的重要工具,它们分别负责网络通信和HTML解析,结合...
标题中的“基于SpringBoot的爬取代理可用的代理IP,开箱即用”指的是一个使用SpringBoot框架开发的项目,其主要功能是自动抓取网络上的代理IP,并验证这些IP是否可用,以便在进行网络爬虫或其他需要更换IP的任务时...
在使用Apache HttpClient进行HTTP通信时,可能会遇到"HttpClient问题:The server failed to respond with a valid HTTP resp"这样的异常。这个错误通常表示服务器未能返回一个有效的HTTP响应,这可能是由多种原因...
我们可以使用getByName()方法输入代理IP字符串,得到InetAddress对象。 3. **ProxySelector类**: Android系统默认使用系统级的ProxySelector,但我们可以通过重写这个类并设置为我们自定义的实现,以便在每次网络...