分享页面
已经找到“” 的记录2803条
如何利用IP代理池提升数据采集的效率
在数据采集的海洋中,代理IP池就像是一艘装备精良的快艇,能够帮助我们快速、高效地搜集信息。那么,如何利用这个强大的工具来提高数据采集的效率呢?今天,我们就来探讨一下这个话题。 ## **选择合适的代理IP池** 首先,选择合适的代理IP池是提高数据采集效率的关键。一个好的代理IP池应该具备广泛的IP覆盖、快速的响应时间和稳定的连接。这样,无论是进行市场调研、用户行为分析还是竞争情报收集,你都能确保数据采集的连续性和准确性。 ## **分散请求,降低风险** 使用代理IP池可以分散请求,降低单一IP被目标网站识别和封禁的风险。通过从不同的IP地址发起请求,你可以模拟真实用户的访问行为,减少被网站反爬虫机制检测到的可能性。 ## 提高请求速度 代理IP池可以同时处理多个请求,这意味着你可以在短时间内从多个来源收集数据。这种并行处理能力显著提高了数据采集的速度,让你能够快速响应市场变化。 ## **灵活应对变化** 在数据采集过程中,目标网站可能会改变其结构或策略。拥有一个灵活的代理IP池可以让你迅速适应这些变化,继续高效地进行数据采集。 ## **总结** 通过这篇文章,我们不仅分享了如何利用IP代理池提高数据采集效率的实用技巧,知道了如何利用IP代理池提高数据采集效率,需要从选择合适的代理服务、分散请求、提高请求速度和灵活应对变化等方面入手。希望这篇文章能够帮助你在数据采集项目中实现更高的效率,取得更好的成果。
来自:技术分享
如何提高代理IP的并发能力
在数据采集的领域,时间就是金钱,效率就是生命。代理IP的并发能力直接关系到我们能否快速、高效地获取数据。那么,如何提高代理IP的并发能力呢?今天,我们就来聊聊这个话题,为你的数据采集项目提速。 并发,简而言之,就是同时进行多个操作的能力。在代理IP的使用中,高并发意味着我们可以同时从多个IP地址发起请求,这样可以大大提高数据采集的速度和效率。 ### **1. 选择合适的代理IP服务** 提高并发能力的第一步是选择合适的代理IP服务。不同的服务提供商提供的IP数量和质量各不相同。选择一个提供大量、高质量IP的服务提供商,比如青果网络,可以为你的高并发需求打下坚实的基础。 ### **2. 优化请求逻辑** 优化你的请求逻辑也是提高并发能力的关键。这包括合理设置请求间隔,避免过快的请求导致目标网站的反爬虫机制触发,以及实现请求的动态分配,确保每个代理IP都能得到充分利用。 ### **3. 使用高效的编程框架** 使用高效的编程框架和库可以大幅提升并发处理能力。例如,Python中的`asyncio`库可以让你轻松实现异步请求,从而提高并发量。 ### **4. 分布式爬虫系统** 对于大规模的数据采集项目,考虑构建分布式爬虫系统。通过在多台服务器上部署爬虫,可以显著提高并发量,实现更高效的数据采集。 ### **5. 监控和调整** 监控代理IP的使用情况,包括响应时间和成功率,根据实际情况调整并发策略。及时发现并解决可能的问题,比如某个IP被封禁,可以保证并发请求的稳定性。 ### **总结** 提高代理IP的并发能力,需要从选择合适的服务提供商、优化请求逻辑、使用高效的编程框架、构建分布式爬虫系统,以及进行实时监控和调整等多方面入手。青果网络作为你的合作伙伴,将为你提供稳定、高效的代理IP服务,帮助你在数据采集的赛道上加速前进。希望这篇文章能够帮助你在数据采集项目中实现更高的并发量,提高工作效率。
来自:技术分享
代理IP是什么,有什么用?
在这个信息爆炸的时代,数据采集已经成为许多行业不可或缺的一部分。而在这个过程中,代理IP扮演了一个非常重要的角色。那么,代理IP究竟是什么?它在数据采集中又有什么用呢?让我们一起来揭开代理IP的神秘面纱。 ## **代理IP是什么?** 代理IP,简单来说,就是一个中间人,它位于你的计算机和目标服务器之间。当你通过代理IP发送请求时,实际上是代理服务器代替你的计算机向目标服务器发起请求,并将获取的数据返回给你。 ## **代理IP在数据采集中的作用** 1. **突破地域限制** 代理IP可以帮助我们突破地域限制,访问那些可能因为地理位置而无法直接访问的数据。这对于需要从全球范围内收集数据的企业和研究者来说尤为重要。 2. **提高数据采集效率** 使用代理IP可以同时从多个不同的地点发起请求,这大大提高了数据采集的效率,尤其是在需要从多个数据源收集数据的情况下。 3. **保护数据采集的稳定性** 由于代理IP可以分散请求,这有助于避免因频繁访问同一服务器而被限制或封禁的风险,从而保护数据采集过程的稳定性。 4. **提升数据的多样性** 代理IP通常覆盖全球多个国家和地区,这使得数据采集可以覆盖更广泛的地区,提升收集数据的多样性。 在代理IP服务领域,青果网络以其专业的技术和优质的服务赢得了广泛的信赖。我们提供日更600W+纯净IP资源池,代理IP服务不仅覆盖全球多个国家和地区,还支持多种协议,满足不同用户的需求。 ## **总结** 代理IP是数据采集中的重要工具,它帮助我们突破地域限制,提高数据采集效率,保护数据采集的稳定性,并提升数据的多样性。 通过这篇文章,我们介绍了代理IP的概念和它在数据采集中的重要作用,希望这篇文章能够帮助您更好地理解代理IP,并在您的数据采集项目中发挥其最大的潜力。青果网络作为您的合作伙伴,将为您提供高质量的代理IP服务,助力您的数据采集项目顺利进行。
来自:技术分享
如何判断自己的数据采集项目,要多少代理IP?
在数据采集的世界里,代理IP就像是我们的侦察兵,帮助我们从互联网的海洋中获取宝贵的信息。但是,如何判断自己的项目需要多少这样的侦察兵呢?今天,我们就来聊聊如何为您的数据采集项目选择合适的代理IP数量。 --- ## **项目规模与数据量** 首先,考虑您的项目规模和所需收集的数据量。如果您的目标是收集大量数据,比如进行市场趋势分析或用户行为研究,那么您可能需要更多的代理IP来提高数据采集的效率和覆盖面。 ## **目标网站的反爬虫策略** 不同的网站有不同的反爬虫策略。一些网站对频繁的请求非常敏感,可能会限制或封禁那些看起来可疑的IP地址。在这种情况下,您可能需要尽可能多的代理IP来分散请求,降低被封禁的风险。 ## **数据采集的速度要求** 如果您的项目需要快速获取数据,比如实时监控社交媒体趋势或股票市场动态,这些都需要我们需使用更多的代理IP来并行处理多个请求,以满足速度要求。 ### **预算限制** 代理IP的数量也受到预算的限制。高质量的代理IP往往成本较高,因此您需要根据自己的预算来决定可以购买多少代理IP。 在决定代理IP数量时,青果网络可以为您提供灵活的解决方案。我们提供日更超600W+的纯净IP资源池,代理IP服务覆盖全球多个国家和地区,支持多种协议,能够满足您在数据采集过程中的不同需求。无论是小规模的精准采集还是大规模的数据收集,青果网络都能为您提供合适的代理IP数量。 ## **总结** 判断数据采集项目需要多少代理IP,需要综合考虑项目规模、目标网站的反爬虫策略、数据采集速度要求以及预算限制。青果网络作为您的合作伙伴,将为您提供稳定、高效的代理IP服务,帮助您在数据采集的道路上更加顺畅。希望这篇文章能够帮助您更好地理解代理IP的选择,并在数据采集中做出更合适的决策。
来自:技术分享
如何挑选靠谱的IP代理池?
嘿,寻觅一个靠谱的IP代理池就好比找到一双合脚的跑鞋,舒适性和耐用性缺一不可。IP代理池同样要支撑您在网络世界中“跑”得更快更远。所以,别急,我们来看看有哪些小妙招,教您挑选出最合适的IP代理池吧! #### 看速度——像猎豹一样迅捷 谁不想拥有“风驰电掣”的浏览速度呢?在选择代理池时,速度是一定要试试的要素! - **快速响应**:优质代理通常能提供小于100毫秒的响应时间,快速响应意味着您使用的体验更流畅。青果网络就提供了这种极速飞驰的快感哦。 - **延迟低**:谁想在数据采集中盯着屏幕等“原地踏步”?低延迟保证了您秒开网页,迅捷完成采集。 #### 可靠性——像老朋友般稳定 找到靠谱的代理服务,就如同找到一位稳妥的朋友,怎么依靠都不会掉链子。 - **高可用率**:出色的代理池,应该具备超过99%的可用率,这样您就不必担心掉链子的情况。青果网络在这一点上可是小有名气! - **故障排除快速**:好的代理服务总能在IP不可用时,立刻调度补齐,确保不中断您的业务。 #### 覆盖广——像地图般全面 当您需要大数据支持,全球化覆盖的代理服务能让您获取不同区域的信息,成就“全景”视角。 - **全球覆盖**:理想的代理池要支持来自多个国家或地区的IP,让您随时获取广泛信息。比如,青果网络提供的全球200多个城市的覆盖。 - **多协议支持**:不仅仅是HTTP,支持HTTPS、SOCKS5这些额外协议,更能灵活适应不同需求场合。 #### 安全性——切忌“数据泄露” 在各种可能的网络风险前,安全性是您需要时刻关心的“保护盾”。 - **安全保护**:确保代理池提供数据加密,让您的业务数据在采集和传输中安全无虞。 - **评价和口碑**:寻找有良好安全记录和较好客户反馈的服务商,了解过去用户的体验和满意度。 ### 结语 在挑选靠谱IP代理池的过程中,最重要的是明确人工智能工具的实际需求,通过多样性和适配性来选定最佳方案。希望这些活泼小知识能如同深夜的星光,照亮你的网路选择之旅! 如果您还有任何疑问或者需要了解更多,青果网络永远欢迎您的光临和咨询。祝您从此开启畅快的互联网真我之旅!
来自:技术分享
Node语言代码示例
## nodejs http ```javascript const http = require("http"); const url = require("url"); const targetURL = url.parse("https://test.ipw.cn"); // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing const proxyIp = "您的代理IP"; const proxyPort = 端口号; const authKey = "请改成您的Key"; const password = "请改成您的AuthPwd"; const base64 = new Buffer.from(authKey + ":" + password).toString("base64"); const options = { host: proxyIp, port: proxyPort, path: targetURL, method: "GET", headers: { "Host": urlParsed.hostname, "Proxy-Authorization": "Basic " + base64 } }; http.request(options, function (resp) { console.log("response status code: " + resp.statusCode); resp.pipe(process.stdout); }).on("error", function (err) { console.log("request failed: " + err); }).end(); ``` ## nodejs request ```javascript const request = require("https://test.ipw.cn"); // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing const targetUrl = "https://api.ipify.org"; const proxyIp = "您的代理IP"; const proxyPort = 端口号; const authKey = "请改成您的Key"; const password = "请改成您的AuthPwd"; const proxyUrl = "http://" + authKey + ":" + password + "@" + proxyIp + ":" + proxyPort; const req = request.defaults({'proxy': proxyUrl}); const options = { url: targetUrl, headers: {} }; req.get(options, function (err, resp, body) { if (err) { return console.log(err); } console.log("response status code: " + resp.statusCode); console.log("response body: " + body); }).on("error", function (err) { console.log("request failed: " + err); }); ``` ## nodejs superagent ```javascript const request = require("superagent"); require("superagent-proxy")(request); const targetUrl = "https://test.ipw.cn"; // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing const proxyIp = "您的代理IP"; const proxyPort = 端口号; const authKey = "请改成您的Key"; const password = "请改成您的AuthPwd"; const proxyUrl = "http://" + authKey + ":" + password + "@" + proxyIp + ":" + proxyPort; request.get(targetUrl).proxy(proxyUrl).end(function onResponse(err, resp) { if (err) { return console.log(err); } console.log("response status code: " + resp.statusCode); console.log("response body: " + resp.text); }); ``` ## nodejs axios ```javascript const axios = require("axios") const {HttpsProxyAgent} = require("https-proxy-agent") const targetUrl = "https://test.ipw.cn" // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing const proxyIp = "您的代理IP" const proxyPort = 端口号 const authKey = "请改成您的Key" const password = "请改成您的AuthPwd" const proxy = new HttpsProxyAgent(`http://${authKey}:${password}@${proxyIp}:${proxyPort}`) axios.get(targetUrl, { httpAgent: proxy, httpsAgent: proxy, }).then(function (response) { console.log("response body: " + response.data) }).catch(function (error) { console.log("request failed: " + error) }).finally(function () { console.log("request finished.") }) // 如果目标站是HTTPS,则需要使用下面的代码进行代理请求 let httpsProxyAgent = require('https-proxy-agent'); var agent = new HttpsProxyAgent(`http://${authKey}:${password}@${proxyIp}:${proxyPort}`); var config = { url: "https://api.ipify.org", httpsAgent: agent } axios.request(config) .then(function(response) { console.log("response body: " + response.data) }).catch(function(error) { console.log("request failed: " + error) }) ```
隧道代理 Go 语言接入指南
## 概述 本文档将指引你进行隧道代理的接入,在此文档中使用到的术语将会在下方进行列出。 | 术语 | 解释 | | :------- | :----------------------------------------- | | 隧道 | 自动更换代理 IP 的代理服务 | | 固定时长 | 服务器将在固定时长后自动切换IP,例如1分钟 | | 通道 | 使用多个通道同时发起请求,每个通道的IP不同 | 隧道代理有多种使用方式,具体行为取决于套餐及模式。 - 普通模式 每次请求都自动切换IP - 普通模式打标记 普通模式下,希望多个HTTP请求保证代理IP相同,可以给多个请求的代理协议打上相同的标记,并标记这个代理IP的存活时间(不主动设置存活时间则默认为10秒) - 固定时长多通道模式 服务器定时切换IP,可同时使用多个通道发起请求,即可以同时使用多个IP ## 前置知识 在 go 语言中,通常使用 http.Client 进行 http/s 代理的设定与请求的发送,使用 http.NewRequest 进行请求的构建。 ### Proxy Url Scheme 由协议、用户名、密码、域名、端口几部分组成 例如 http 协议的代理 url ``` http://[user:password@]hostname:port ``` ## 使用 GO 接入 **以下内容假设读者具备基本的 Go 语言编程能力和对网络协议具有一定的了解。** ### 生成 url 普通模式 ```go link := fmt.Sprintf("http://%s:%s@%s", authKey, password, proxyServer) proxyURL, _ := url.Parse(link) ``` 普通模式打标记 ```go link := fmt.Sprintf("http://%s:%s:%s:%d@%s", authKey, password, "channel-1", 20, proxyServer) proxyURL, _ := url.Parse(link) ``` 固定时长多通道模式 ```go link := fmt.Sprintf("http://%s:%s:%s@%s", authKey, password, "channel-1", proxyServer) proxyURL, _ := url.Parse(link) ``` ### 构建 Client 后续将使用该 client 发起 request ```go client := http.Client{ Transport: &http.Transport{ Proxy: http.ProxyURL(proxyURL), }, } ``` ### 构建 HTTP/s GET 请求 以 https://api.ipify.org 为例。 因为已确认参数合法,因此构建不会发生错误,无需处理错误。 ``` request, _ := http.NewRequest("GET", "https://test.ipw.cn", nil) // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing ``` ### 执行已构建的 HTTP/s 请求 ```go response, err := client.Do(request) if err != nil { panic(err) } defer response.Body.Close() ``` ### 读取响应实体 response.Body 是 io.Reader 类型,需要手动进行读取 ```go body, err := io.ReadAll(response.Body) if err != nil { panic(err) } fmt.Println(string(body)) ``` ## 示例代码 ```go package main import ( "fmt" "io" "log" "net/http" "net/url" ) const ( authKey = "" password = "" server = "" channel = "channel-1" ) func main() { var link string if channel == "" { link = fmt.Sprintf("http://%s:%s@%s", authKey, password, server) } else { link = fmt.Sprintf("http://%s:%s:%s@%s", authKey, password, channel, server) } proxyURL, _ := url.Parse(link) client := http.Client{ Transport: &http.Transport{ Proxy: http.ProxyURL(proxyURL), }, } request, _ := http.NewRequest("GET", "https://test.ipw.cn", nil) // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing response, err := client.Do(request) if err != nil { panic(err) } defer response.Body.Close() body, err := io.ReadAll(response.Body) if err != nil { panic(err) } log.Println("response body", string(body)) } ```
C#语言代码示例
```c# string targetUrl = "https://test.ipw.cn"; // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing string proxyIp = "您的代理IP"; string proxyPort = "端口号"; string authKey = "请改成您的Key"; string password = "请改成您的AuthPwd"; WebProxy proxy = new WebProxy(string.Format("{0}:{1}", proxyIp, proxyPort), true); proxy.Credentials = new NetworkCredential(authKey, password); ServicePointManager.Expect100Continue = false; var request = WebRequest.Create(targetUrl) as HttpWebRequest; request.AllowAutoRedirect = true; request.KeepAlive = true; request.Method = "GET"; request.Proxy = proxy; request.Timeout = 10000; request.ServicePoint.ConnectionLimit = 16; using (var resp = request.GetResponse() as HttpWebResponse) using (var reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8)){ string htmlStr = reader.ReadToEnd(); } ```
Shell语言代码示例
```shell #!/bin/bash targetURL="https://test.ipw.cn" # 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing proxyAddr="您的代理IP:端口号" authKey="请改成您的Key" password="请改成您的AuthPwd" curl -x ${authKey}:${password}@${proxyAddr} ${targetURL} -vvvv ```
Java语言代码示例
## Java HttpURLConnection ```java package com.qgproxy; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.Authenticator; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.PasswordAuthentication; import java.net.Proxy; import java.net.URL; class QGProxyAuthenticator extends Authenticator { private String user, password; public QGProxyAuthenticator(String user, String password) { this.user = user; this.password = password; } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user, password.toCharArray()); } } class QGProxy { public static void main(String args[]) { // 如果您的本地jdk版本在Java 8 Update 111以上,需要增加以下代码 // System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "false"); // System.setProperty("jdk.http.auth.proxying.disabledSchemes", "false"); String targetUrl = "https://test.ipw.cn"; // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing String proxyIp = "您的代理IP"; int proxyPort = 端口号; String authKey = "请改成您的Key"; String password = "请改成您的AuthPwd"; try { URL url = new URL(targetUrl); Authenticator.setDefault(new QGProxyAuthenticator(authKey, password)); InetSocketAddress socketAddress = new InetSocketAddress(proxyIp, proxyPort); Proxy proxy = new Proxy(Proxy.Type.HTTP, socketAddress); HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy); byte[] response = readStream(connection.getInputStream()); System.out.println(new String(response)); } catch (Exception e) { System.out.println(e.getLocalizedMessage()); } } public static byte[] readStream(InputStream inStream) throws Exception { ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = -1; while ((len = inStream.read(buffer)) != -1) { outSteam.write(buffer, 0, len); } outSteam.close(); inStream.close(); return outSteam.toByteArray(); } } ``` ## Java okhttp(4.10.0版本以上) ```java package com.qgproxy; import okhttp3.*; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; import java.util.concurrent.TimeUnit; public class QGProxy { final static String proxyIp = "您的代理IP"; final static Integer proxyPort = 端口号; final static String authKey = "请改成您的Key"; final static String password = "请改成您的AuthPwd"; public Response request() throws IOException { Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, proxyPort)); OkHttpClient client = new OkHttpClient.Builder() .proxy(proxy) .proxyAuthenticator((route, response) -> { String credential = Credentials.basic(authKey, password); return response.request().newBuilder().header("Proxy-Authorization", credential).build(); }). build(); Request request = new Request.Builder().url("https://api.ipify.org").get().build(); return client.newCall(request).execute(); } public static void main(String[] args) { QGProxy qgProxy = new QGProxy(); try { Response resp = qgProxy.request(); System.out.println(resp.body().string()); } catch (Exception e) { System.out.printf("failed to proxy: %s\n", e.getMessage()); } } } ``` ## Java jsoup ```java package com.qgproxy; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.io.IOException; import java.net.Authenticator; import java.net.InetSocketAddress; import java.net.PasswordAuthentication; import java.net.Proxy; public class QGProxy { final static String proxyIp = "您的代理IP"; final static Integer proxyPort = 端口号; final static String authKey = "请改成您的Key"; final static String password = "请改成您的AuthPwd"; public static void main(String[] args) throws Exception { String targetUrl = "https://test.ipw.cn"; // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing Authenticator.setDefault(new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(authKey, password.toCharArray()); } }); // 如果您的本地jdk版本在Java 8 Update 111以上,需要增加以下代码 // System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "false"); // System.setProperty("jdk.http.auth.proxying.disabledSchemes", "false"); Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyIp, proxyPort)); try { Document doc = Jsoup.connect(targetUrl).ignoreContentType(true).timeout(10000).proxy(proxy).get(); if (doc != null) { System.out.println(doc.body().html()); } } catch (IOException e) { e.printStackTrace(); } } } ``` ## Java HttpClient 3.X ```java package com.qgproxy; import java.io.IOException; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; 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.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class QGProxy { public static void main(String[] args) { String targetUrl = "https://test.ipw.cn"; // 访问的目标站点 // 如果上面目标站不可用,请使用ip.sb、ipinfo.io、ip-api.com、64.ipcheck.ing String proxyIp = "您的代理IP"; int proxyPort = 端口号; String authKey = "请改成您的Key"; String password = "请改成您的AuthPwd"; try { HttpHost proxy = new HttpHost(proxyIp, proxyPort, "http"); HttpHost target = new HttpHost(targetUrl, 80); // 设置认证 CredentialsProvider provider = new BasicCredentialsProvider(); provider.setCredentials(new AuthScope(proxy), new UsernamePasswordCredentials(authKey, password)); CloseableHttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(provider).build(); RequestConfig config = RequestConfig.custom().setProxy(proxy).build(); HttpGet httpGet = new HttpGet("/ip"); httpGet.setConfig(config); CloseableHttpResponse resp = null; resp = httpClient.execute(target, httpGet); if (resp.getStatusLine().getStatusCode() == 200) { System.out.println("OK"); } System.out.println(resp.getStatusLine()); } catch (IOException e) { e.printStackTrace(); } } } ``` ## Java HttpClient 4.X ```java package com.qgproxy import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.net.URI; import java.util.Arrays; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.http.Header; import org.apache.http.HeaderElement; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.AuthCache; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.HttpRequestRetryHandler; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.config.AuthSchemes; import org.apache.http.client.entity.GzipDecompressingEntity; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.LayeredConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.auth.BasicScheme; import org.apache.http.impl.client.BasicAuthCache; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.ProxyAuthenticationStrategy; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicNameValuePair; import org.apache.http.NameValuePair; import org.apache.http.util.EntityUtils; public class QGProxy { final static String proxyHost = "您的代理IP"; final static Integer proxyPort = 端口号; final static String proxyUser = "请改成您的key"; final static String proxyPass = "请改成您的password"; private static PoolingHttpClientConnectionManager cm = null; private static HttpRequestRetryHandler httpRequestRetryHandler = null; private static HttpHost proxy = null; private static CredentialsProvider credsProvider = null; private static RequestConfig reqConfig = null; static { ConnectionSocketFactory plainsf = PlainConnectionSocketFactory.getSocketFactory(); LayeredConnectionSocketFactory sslsf = SSLConnectionSocketFactory.getSocketFactory(); Registry registry = RegistryBuilder.create() .register("http", plainsf) .register("https", sslsf) .build(); cm = new PoolingHttpClientConnectionManager(registry); cm.setMaxTotal(10); cm.setDefaultMaxPerRoute(5); proxy = new HttpHost(proxyHost, proxyPort, "http"); credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(proxyUser, proxyPass)); reqConfig = RequestConfig.custom() .setExpectContinueEnabled(false) .setProxy(new HttpHost(proxyHost, proxyPort)) .build(); } public static void doRequest(HttpRequestBase httpReq) { CloseableHttpResponse httpResp = null; try { httpReq.setConfig(reqConfig); CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(cm) .setDefaultCredentialsProvider(credsProvider) .build(); AuthCache authCache = new BasicAuthCache(); authCache.put(proxy, new BasicScheme()); authCache.put(proxy, new BasicScheme(ChallengeState.PROXY)); HttpClientContext localContext = HttpClientContext.create(); localContext.setAuthCache(authCache); httpResp = httpClient.execute(httpReq, localContext); System.out.println(httpResp.getStatusLine().getStatusCode();); BufferedReader rd = new BufferedReader(new InputStreamReader(httpResp.getEntity().getContent())); String line = ""; while((line = rd.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (httpResp != null) { httpResp.close(); } } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { String targetUrl = "https://api.ipify.org"; try { HttpGet httpGet = new HttpGet(targetUrl); doRequest(httpGet); } catch (Exception e) { e.printStackTrace(); } } } ```

扫码添加专属客服

扫码关注公众号