分享页面
已经找到“” 的记录2523条
使用动态代理池做数据采集的时候,要注意哪些问题?
数据采集,信息洪流中的“富矿开采”,对于许多企业和开发者来说,通过动态代理池采集数据已成为实现多样化数据流的基础。然而,这条数据之路并非一路平坦,我们需要深入了解动用动态代理池时的诸多注意事项。 #### 1. 选择优质的代理服务 首先,选择优质的代理服务提供商至关重要。代理IP的质量直接决定了数据采集的效率和效果。 - **高可用性**:确保代理池内的IP可用率足够高,避免因为失效IP导致数据采集中断。青果网络提供的代理服务可用率高达99.9%,是您坚实的后盾。 - **覆盖广泛**:采集不同区域的数据时,需要代理服务能提供私网覆盖全球的IP范围,以保证数据收集的各国、各地区适用性。 #### 2. 管理IP切换的频率 动态代理池的本质就是频繁更换IP,这有助于防止被目标网站识别为异常请求。 - **合理设定切换间隔**:IP切换频率需要与目标网站的访问限制相匹配,太频繁可能导致目标站点响应变慢或请求失败。 - **平衡频率与有效性**:既要保护IP不被封禁,也要确保切换频率不会过于频繁影响数据采集的连续性。 #### 3. 监控代理池运行状态 动态代理池的维护需要实时监控其使用状态,以保证高成功率的运行。 - **故障排查**:实时检测代理池中的IP是否运行正常,及时排查异常情况,例如IP被封或响应速度过慢。 - **调整策略**:通过采集过程中的反馈(如响应时间、成功率),动态调整使用的IP池策略,以提高数据采集的效率。 #### 4. 合法合规的数据采集 在使用代理IP进行数据采集时,合法合规是每位采集者必须时刻牢记的准则。 - **遵守当地法规**:不同国家和地区的数据使用政策差异显著,确保数据采集项目符合相关法律规定,防止触碰法律红线。 - **尊重网站协议**:使用时尽量遵循目标网站的robots.txt文件与用户协议,避免过载目标网站服务器和引起法律问题。 在复杂多变的数据采集中,青果网络提供了优质的动态代理解决方案,助您以最高的安全性与效能获得所需数据,采用企业分池技术,业务成功率高于竞品30%。 ### 总结 在利用动态代理池进行数据采集过程中,遵循可靠性、有规有序地操作是提升采集项目效率的金钥匙。希望本文所提供的详细建议,能为您的数据采集带来更为流畅和成功的体验。 欢迎随时与青果网络联络,我们致力于成为您可靠、持久的数据采集助手。
来自:技术分享
优质的动态代理一定是速度快的代理吗?
在互联网蓬勃发展的时代,动态代理已经成为众多应用场景下的重要工具。关于优质动态代理的衡量标准,不少人将“速度”视为首要标准。但事实上,速度仅是名列其中的一项。本文将详细分析优质动态代理的多重品质,揭示速度背后的更多考量。 #### 动态代理的本质 动态代理是指在一定时间或请求间隔内,自动更换IP地址的代理技术。它能够通过频繁变换IP来增强客户端请求的多样性和分布性。 - **速度**:自然是影响用户体验的重要因素之一。高速度意味着响应时间短,更快的页面加载,更流畅的数据传输。 - **IP更换频率**:与速度相得益彰,高频率的IP更替是动态代理的核心特性,其能够大幅减少被目标服务器频次检测的风险。 #### 优质动态代理的多重标准 1. **稳定性**:一个优质的动态代理,必须首先确保连接的稳定。即便速度再快,如果频繁掉线或连接不稳定,同样无法满足业务需要。 2. **覆盖范围**:拥有广泛的IP资源覆盖,特别是在需要全球数据访问时,优质的动态代理应该能够提供多地域、多国家的IP选择。 3. **数据安全**:保障数据传输安全性。而且不止传输快,数据传输更安全。 4. **业务成功率**:青果网络的经验显示,优质动态代理应该达到高业务成功率。青果的动态代理提供的业务成功率高于竞品30%,说明了可靠的操作性。 #### 速度不是唯一的标准 - **负载能力**:优质动态代理在面对高并发请求时,需具备良好的负载能力。一个速度快但不能承载并发的代理,很可能在实际应用中失去优势。 - **服务质量**:全天候的稳定服务,技术支持与故障排除,也是评判优质动态代理的重要标准之一。 ### 真实场景中的选择 在明确了优质动态代理的多重标准后,如何选择适合自己的代理更显得至关重要: - 针对需频繁更换IP且对安全性要求高的任务,优选支持HTTPS/HTTP协议的代理资源。 - 若需在时效性上占优势,业界顶尖如青果网络,凭借600+万IP库存,提供快速且稳定的连接。 ### 结语 速度固然是优质动态代理的魅力所在,但我们不能只看表象而忽略其背后的宽泛属性。衡量动态代理的优质与否,应当从稳定性、安全性、IP覆盖与业务成功等全面出发。综合考虑这些要素,方能在数字竞争的浪潮中寻得长青之道。 期待本文能为您在选择动态代理时,提供启迪与帮助。
来自:技术分享
为什么要选择优质的短效IP池来进行抓取?
在数据抓取领域,代理IP池的选择对于任务的效率和安全性至关重要。优质的短效IP池因其独特的优势,在数据采集、市场分析和网络安全等多个领域中展现出强大的功能。本文将探讨选择优质短效IP池进行数据抓取的重要性。 ## 短效IP池的优势 ### **1. 提高代理IP切换频率** 短效IP池的本质之一是其高频的IP切换特性。这种动态频繁的优势在于: - **降低IP检测风险**:频繁的IP切换让目标网站很难进行有效的IP拉黑或跟踪,减少了采集被阻止的概率。 - **多个请求的分散减负**:尤其在进行大量短期请求时,高切换频次极大程度上减轻了单个IP的负担,提高访问成功率。 ### **2. 增强数据采集效率** 短效IP池在短期内可提供丰富的IP资源支持,是大规模数据采集的极佳选择: - **适应临时高峰需求**:适合突发的高并发请求,按需分配IP资源,避免因流量过大导致的不可用。 - **灵活应对反爬策略**:很多目标网站设计了复杂的反爬机制,快速切换IP能有效突破此类限制。 ### **3. 优化市场活动效果** 在开展市场活动和在线推广时,短效IP池能够提供快速的方案支持: - **广告效果分析**:通过更换不同的IP检测广告在不同地区或人群中的曝光效果。 - **多点营销策略**:短期内执行多点位市场操作,灵活调整策略应对各种市场环境变化。 ### **4. 提高用户访问体验** 对某些依赖于复杂访问路径的应用,短效IP池让用户访问体验更为流畅: - **减少用户刷新等待**:通过代理池快速响应用户请求,降低网页刷新等待时间。 - **提升访问速度**:尤其在远程或者国际访问时,有效减少网络延迟。青果网络的短效IP池服务,IP覆盖国内200多个城市,采用三大运营商宽带资源,自研代理服务技术,延迟<100ms,支持HTTP/HTTPS/SOCKS5三大协议,使用方式灵活,赋能企业大数据转型。 **总结** 选择优质的短效IP池对于数据抓取任务至关重要。它不仅能够提高代理IP切换频率,降低被封禁的风险,还能增强数据采集效率,优化市场活动效果,并提高用户访问体验。青果网络作为国内领先的企业级代理IP服务商,以其全球覆盖、高可用率和强大的技术支持,为用户提供了优质的短效IP池服务,是数据抓取任务的理想选择。
来自:技术分享
HTTP代理IP是什么?使用HTTP代理有什么好处?
在互联网技术变得日趋复杂的今天,HTTP代理IP作为一种基础而又重要的网络技术,为各类互联网应用提供了多重便利。本文将详细解析HTTP代理IP的概念,以及使用它所能带来的多重好处。 #### 什么是HTTP代理IP? 简单来讲,HTTP代理IP是一种充当用户与互联网之间中间节点的技术。它主要用于处理HTTP协议的请求和响应。 - **技术原理**:HTTP代理IP接收到用户的请求后会转发到目标服务器,再将获取到的响应返回给用户。这样,用户对外展示的IP地址就变成了代理IP的地址。 - **类型多样**:HTTP代理可以是透明代理、匿名代理,也可以是更高安全性的高匿名代理。根据应用场景的不同,可以选择适合的代理类型。 #### 使用HTTP代理的好处 商用价值和个人用途都推动了HTTP代理的广泛使用。以下是它的几个主要好处: - **数据安全保护**:通过代理IP做数据采集的时候,能为用户提供了额外的保护层,保障使用者的数据安全。 - **访问受限内容**:某些内容因为地域限制可能无法访问,HTTP代理可以提供在不同国家的IP地址,使用户能够突破地域限制,真正做到全球视角。 - **提升访问速度**:一些HTTP代理提供缓存功能,可以在请求中为常用内容直接返回缓存结果,显著缩短加载时间,提高访问速度。 - **负载均衡与安全检测**:许多企业使用HTTP代理来均衡负载,把请求分散到多个服务器,降低单点故障风险。同时,代理还可以监测流量,辅助企业进行安全检测。 #### HTTP代理的具体应用场景 在实际应用中,HTTP代理被广泛应用于不同的领域,涵盖从个人上网体验到企业级应用解决方案。 - **数据采集与分析**:企业依赖HTTP代理进行数据采集,尤其是在分析市场趋势和用户行为时,它为抓取提供了稳定而高效的支持。青果网络作为国内领先的企业级代理IP服务商,提供优质的HTTP代理服务,达到业务成功率高于竞品30%的表现。 - **测试与开发环境**:开发人员利用代理进行各种环境的模拟测试,可以快速调试和优化应用程序。 ### 结语 HTTP代理IP在现代互联网中的角色,可谓既真实又无形。它不仅仅是一个技术工具,更象征着用户对安全、高效、灵活网络体验的追求。无论是从个人角度还是商业角度来看,充分利用HTTP代理的优势,始终是迈向数字未来的一项睿智选择。
来自:技术分享
在数据抓取的时候,短效IP比长效IP有哪些优势?
在数据抓取领域,代理IP的选择对于任务的成功率和效率至关重要。短效IP和长效IP各有其特点和适用场景,但在数据抓取过程中,短效IP因其独特的优势而受到青睐。本文将和大家一起探讨短效IP在数据抓取中相比长效IP的优势。 ### 短效IP的定义与特点 短效IP是指有效期较短的代理IP,通常从几分钟到几小时不等。这种IP的特点是频繁更换,为用户提供了较高的匿名性和灵活性。 ### **数据抓取中短效IP的优势** **1. 提高业务成功率** 在数据抓取过程中,频繁更换IP地址可以降低被目标网站识别为爬虫的风险。短效IP由于其生命周期短,可以更有效地模拟正常用户行为,从而提高业务成功率。青果网络提供的短效IP服务,通过业务分池技术,确保业务成功率平均高于竞品30%。 **2. 降低封禁风险** 长效IP由于长时间使用同一IP地址,容易被目标网站识别并封禁。相比之下,短效IP由于其不稳定性,更难被追踪和封锁,从而降低了封禁风险。 **3. 提升数据采集效率** 在进行大规模数据采集时,短效IP可以快速适应网络环境的变化,尤其是在面对动态网站防护系统时,短效IP能够提供更稳定的数据流。 **4. 保护用户隐私** 短效IP由于其匿名性更高,可以更好地保护用户隐私,尤其是在涉及敏感数据抓取时,短效IP提供了额外的安全层。 **5. 灵活性和可扩展性** 短效IP服务可以根据用户的需求快速扩展或缩减,适应不同的业务需求。这种灵活性使得短效IP在处理突发的大规模数据采集任务时更为有效。 ### **青果网络的短效IP服务** 青果网络是国内领先的企业级代理IP服务商,其短效IP节点覆盖全球200多个城市,采用三大运营商宽带资源,构建日更600+万的纯净IP资源池。采用业务分池技术,业务成功率平均高于竞品30%。 **技术细节** 在实际应用中,短效IP的更换可以通过编程实现自动化管理。以下是一个简单的Python代码示例,展示如何使用短效IP进行数据抓取: ```python import requests import random # 假设这是你的短效代理IP列表 short_lived_proxies = [ 'http://IP1:端口', 'http://IP2:端口', # 更多短效IP... ] # 随机选择一个代理IP proxy = random.choice(short_lived_proxies) # 发送请求 response = requests.get('目标URL', proxies={'http': proxy, 'https': proxy}) # 检查响应状态码 if response.status_code == 200: print("数据抓取成功") else: print("数据抓取失败") ``` **总结** 在数据抓取的过程中,短效IP因其高安全性、低封禁风险和灵活性,相比长效IP展现出了明显的优势。青果网络的短效IP服务,以其高业务成功率和全球覆盖的优势,为数据抓取任务提供了强有力的支持。选择合适的代理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(); } } } ```

扫码添加专属客服

扫码关注公众号