轻松抓取任意网站,永不封禁
它依托AI驱动的先进代理服务器方案,能轻松绕过地域限制、验证码、Cloudflare防护及各类反机器人系统。无论数据规模多大、场景有多复杂,它都能零中断地访问并抓取您所需的数据。

网页解锁器核心功能

突破一切封锁,轻松抓取
网页解锁器在后台静默运行,自动处理速率限制、验证码及各类高级反机器人系统,帮您实现大规模数据抓取。内置验证码绕过与自动智能重试机制,确保高效、无封锁的抓取体验,任何目标网站皆可畅通无阻。
- 验证码自动破解与重试
- 零失败请求
- 数据供应永不停断

始终隐形,模拟真人浏览行为
IPRoyal的网页解锁器能复刻真实用户行为,动态生成浏览器指纹,智能匹配最优请求头、缓存、浏览器参数与代理服务器,让每一次访问都像真人操作,彻底规避探测风险。
- 智能请求头组合
- 零封禁风险
- 数据访问持续稳定

随时随地获取本地化数据
无论身在何处,网页解锁器都能帮您绕过地域限制,精准抓取本地化内容。它依靠覆盖195个国家、3,200多万个合规真实的住宅IP,自动为您的每次请求匹配最佳地理位置,确保全球数据采集畅通无阻。
- 动态国家定位
- 智能IP选择
- 195国3,200万+住宅IP
How Companies Use Web Unblocker

大规模网页抓取
凭借验证码自动破解与专为规避反机器人系统设计的先进技术,在各网站并发执行海量自动化请求,持续不间断地采集数据。

价格情报
实时监测全球电商平台竞品定价与库存,杜绝封禁与标记风险。

市场调研
精准采集各区域消费者数据、评价与趋势,为产品策略和扩张计划提供依据。
广告验证
跨地域、跨设备实时核验广告展示效果,确保合规同时精准识别欺诈行为。
SEO 与SERP监控
在全球任意地点追踪关键词排名与搜索引擎返回结果,持续优化您的线上可见度。
Web Unblocker vs. Self-managed Proxies
- 集成方式
- 配置
- 自动解锁
- 验证码自动破解
- 自动重试
- 完整代理服务器管理
- 动态国家选择
- 全球地理定位
- 网页解锁器
-
反向连接代理服务器
-
极简配置
-
-
- 自建代理服务器
-
反向连接代理服务器或直接连接
-
需持续维护
-
-
curl -k -v -x http://unblocker.iproyal.com:12323 --proxy-user username:password -L https://ipv4.icanhazip.com
<?php
declare(strict_types=1);
$url = 'https://ipv4.icanhazip.com';
$proxy = 'http://unblocker.iproyal.com:12323';
$proxyAuth = 'username:password';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyAuth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests
url = 'https://ipv4.icanhazip.com'
proxy = 'unblocker.iproyal.com:12323'
proxy_auth = 'username:password'
proxies = {
'http': f'http://{proxy_auth}@{proxy}',
'https': f'http://{proxy_auth}@{proxy}'
}
response = requests.get(
url,
proxies=proxies,
verify=False,
allow_redirects=True,
timeout=30,
)
print(response.text)
const { fetch, ProxyAgent } = require('undici');
const url = 'https://ipv4.icanhazip.com';
const client = new ProxyAgent(
'http://username:password@unblocker.iproyal.com:12323'
);
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
(async () => {
try {
const response = await fetch(url, {
redirect: 'follow',
dispatcher: client,
headers: {
'user-agent': 'undici-proxy-test'
}
});
const text = await response.text();
if (!response.ok) {
console.error(`HTTP ${response.status} ${response.statusText}`);
}
console.log(text.trim());
} catch (error) {
console.error('Fetch failed:', error);
}
})();
import javax.net.ssl.*;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Main {
private static final String PROXY_HOST = "unblocker.iproyal.com";
private static final int PROXY_PORT = 12323;
private static final String USERNAME = "username";
private static final String PASSWORD = "password";
private static final String TARGET_HOST = "ipv4.icanhazip.com";
private static final int TARGET_PORT = 443;
private static final boolean INSECURE_TRUST_ALL = true;
public static void main(String[] args) {
try {
System.out.println(fetchIpThroughProxy());
} catch (Exception e) {
System.err.println("ERROR: " + e.getClass().getSimpleName() + ": " + e.getMessage());
}
}
private static String fetchIpThroughProxy() throws Exception {
final String basic = Base64.getEncoder()
.encodeToString((USERNAME + ":" + PASSWORD).getBytes(StandardCharsets.ISO_8859_1));
try (Socket proxy = new Socket()) {
proxy.connect(new InetSocketAddress(PROXY_HOST, PROXY_PORT), 15_000);
proxy.setSoTimeout(15_000);
try (var out = new BufferedWriter(new OutputStreamWriter(proxy.getOutputStream(), StandardCharsets.ISO_8859_1));
var in = new BufferedInputStream(proxy.getInputStream())) {
out.write("CONNECT " + TARGET_HOST + ":" + TARGET_PORT + " HTTP/1.1\r\n");
out.write("Host: " + TARGET_HOST + ":" + TARGET_PORT + "\r\n");
out.write("Proxy-Authorization: Basic " + basic + "\r\n");
out.write("Proxy-Connection: Keep-Alive\r\n\r\n");
out.flush();
final String status = readLine(in);
if (status == null || !status.startsWith("HTTP/1.1 200")) {
throw new IOException("CONNECT failed: " + status);
}
drainHeaders(in);
SSLSocket ssl = (SSLSocket) sslFactory().createSocket(proxy, TARGET_HOST, TARGET_PORT, true);
SSLParameters params = ssl.getSSLParameters();
params.setServerNames(java.util.List.of(new SNIHostName(TARGET_HOST)));
ssl.setSSLParameters(params);
ssl.startHandshake();
try (var httpsOut = new BufferedWriter(new OutputStreamWriter(ssl.getOutputStream(), StandardCharsets.ISO_8859_1));
var httpsIn = new BufferedInputStream(ssl.getInputStream())) {
httpsOut.write("GET / HTTP/1.1\r\n");
httpsOut.write("Host: " + TARGET_HOST + "\r\n");
httpsOut.write("User-Agent: JavaRawProxy\r\n");
httpsOut.write("Connection: close\r\n\r\n");
httpsOut.flush();
drainHeaders(httpsIn);
return readBody(httpsIn).trim();
}
}
}
}
private static SSLSocketFactory sslFactory() throws Exception {
if (!INSECURE_TRUST_ALL) return (SSLSocketFactory) SSLSocketFactory.getDefault();
TrustManager[] trustAll = new TrustManager[]{ new X509TrustManager() {
public void checkClientTrusted(java.security.cert.X509Certificate[] c, String a) {}
public void checkServerTrusted(java.security.cert.X509Certificate[] c, String a) {}
public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[0]; }
}};
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, trustAll, new java.security.SecureRandom());
return ctx.getSocketFactory();
}
private static void drainHeaders(InputStream in) throws IOException {
String line;
while ((line = readLine(in)) != null && !line.isEmpty()) {}
}
private static String readBody(InputStream in) throws IOException {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
byte[] tmp = new byte[4096];
int n;
while ((n = in.read(tmp)) != -1) buf.write(tmp, 0, n);
return buf.toString(StandardCharsets.ISO_8859_1);
}
private static String readLine(InputStream in) throws IOException {
StringBuilder sb = new StringBuilder();
int prev = -1, cur;
while ((cur = in.read()) != -1) {
if (prev == '\r' && cur == '\n') { sb.setLength(sb.length() - 1); break; }
sb.append((char) cur); prev = cur;
}
return (sb.length() == 0 && cur == -1) ? null : sb.toString();
}
}
using System.Net;
using System.Net.Sockets;
using System.Net.Security;
using System.Text;
class Program
{
static async Task Main()
{
var url = new Uri("https://ipv4.icanhazip.com");
var proxy = new Uri("http://unblocker.iproyal.com:12323");
const string proxyUser = "username";
const string proxyPass = "password";
using var client = CreateHttpClient(proxy, proxyUser, proxyPass);
var ip = (await client.GetStringAsync(url)).Trim();
Console.WriteLine(ip);
}
private static HttpClient CreateHttpClient(Uri proxyUri, string user, string pass)
{
var handler = new SocketsHttpHandler
{
AllowAutoRedirect = true,
AutomaticDecompression = DecompressionMethods.All,
SslOptions = new SslClientAuthenticationOptions
{
RemoteCertificateValidationCallback = static (_, _, _, _) => true
},
ConnectCallback = async (ctx, ct) =>
{
var tcp = new TcpClient();
await tcp.ConnectAsync(proxyUri.Host, proxyUri.Port);
var stream = tcp.GetStream();
var auth = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{user}:{pass}"));
string host = ctx.DnsEndPoint.Host;
int port = ctx.DnsEndPoint.Port;
var request =
$"CONNECT {host}:{port} HTTP/1.1\r\n" +
$"Host: {host}:{port}\r\n" +
$"Proxy-Authorization: Basic {auth}\r\n" +
"\r\n";
var bytes = Encoding.ASCII.GetBytes(request);
await stream.WriteAsync(bytes, 0, bytes.Length, ct);
await stream.FlushAsync(ct);
using var reader = new StreamReader(stream, Encoding.ASCII, detectEncodingFromByteOrderMarks: false, bufferSize: 4096, leaveOpen: true);
var status = await reader.ReadLineAsync();
if (status is null || !status.Contains(" 200 "))
throw new IOException($"Proxy CONNECT failed: {status}");
while (!string.IsNullOrEmpty(await reader.ReadLineAsync())) { }
return stream;
}
};
var client = new HttpClient(handler)
{
Timeout = TimeSpan.FromSeconds(30)
};
client.DefaultRequestVersion = HttpVersion.Version11;
return client;
}
}
package main
import (
"crypto/tls"
"encoding/base64"
"fmt"
"io"
"net/http"
"net/url"
"time"
)
func main() {
proxyUser := "username"
proxyPass := "password"
proxyStr := "http://unblocker.iproyal.com:12323"
target := "https://ipv4.icanhazip.com"
proxyURL, err := url.Parse(proxyStr)
if err != nil {
panic(err)
}
proxyURL.User = url.UserPassword(proxyUser, proxyPass)
basic := "Basic " + base64.StdEncoding.EncodeToString([]byte(proxyUser+":"+proxyPass))
tr := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
ProxyConnectHeader: http.Header{
"Proxy-Authorization": []string{basic},
},
}
client := &http.Client{
Transport: tr,
Timeout: 30 * time.Second,
}
resp, err := client.Get(target)
if err != nil {
fmt.Println("Request error:", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Printf("HTTP %d\n%s\n", resp.StatusCode, string(body))
}
任何语言均可轻松上手
立即解锁网站并开始抓取。网页解锁器采用反向连接代理服务器,兼容所有编程语言。仅需将现有代理服务器入口节点替换为网页解锁器端点即可,无需任何其他设置或代码改动。
curl -k -v -x http://unblocker.iproyal.com:12323 --proxy-user username:password -L https://ipv4.icanhazip.com
<?php
declare(strict_types=1);
$url = 'https://ipv4.icanhazip.com';
$proxy = 'http://unblocker.iproyal.com:12323';
$proxyAuth = 'username:password';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyAuth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests
url = 'https://ipv4.icanhazip.com'
proxy = 'unblocker.iproyal.com:12323'
proxy_auth = 'username:password'
proxies = {
'http': f'http://{proxy_auth}@{proxy}',
'https': f'http://{proxy_auth}@{proxy}'
}
response = requests.get(
url,
proxies=proxies,
verify=False,
allow_redirects=True,
timeout=30,
)
print(response.text)
const { fetch, ProxyAgent } = require('undici');
const url = 'https://ipv4.icanhazip.com';
const client = new ProxyAgent(
'http://username:password@unblocker.iproyal.com:12323'
);
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
(async () => {
try {
const response = await fetch(url, {
redirect: 'follow',
dispatcher: client,
headers: {
'user-agent': 'undici-proxy-test'
}
});
const text = await response.text();
if (!response.ok) {
console.error(`HTTP ${response.status} ${response.statusText}`);
}
console.log(text.trim());
} catch (error) {
console.error('Fetch failed:', error);
}
})();
import javax.net.ssl.*;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Main {
private static final String PROXY_HOST = "unblocker.iproyal.com";
private static final int PROXY_PORT = 12323;
private static final String USERNAME = "username";
private static final String PASSWORD = "password";
private static final String TARGET_HOST = "ipv4.icanhazip.com";
private static final int TARGET_PORT = 443;
private static final boolean INSECURE_TRUST_ALL = true;
public static void main(String[] args) {
try {
System.out.println(fetchIpThroughProxy());
} catch (Exception e) {
System.err.println("ERROR: " + e.getClass().getSimpleName() + ": " + e.getMessage());
}
}
private static String fetchIpThroughProxy() throws Exception {
final String basic = Base64.getEncoder()
.encodeToString((USERNAME + ":" + PASSWORD).getBytes(StandardCharsets.ISO_8859_1));
try (Socket proxy = new Socket()) {
proxy.connect(new InetSocketAddress(PROXY_HOST, PROXY_PORT), 15_000);
proxy.setSoTimeout(15_000);
try (var out = new BufferedWriter(new OutputStreamWriter(proxy.getOutputStream(), StandardCharsets.ISO_8859_1));
var in = new BufferedInputStream(proxy.getInputStream())) {
out.write("CONNECT " + TARGET_HOST + ":" + TARGET_PORT + " HTTP/1.1\r\n");
out.write("Host: " + TARGET_HOST + ":" + TARGET_PORT + "\r\n");
out.write("Proxy-Authorization: Basic " + basic + "\r\n");
out.write("Proxy-Connection: Keep-Alive\r\n\r\n");
out.flush();
final String status = readLine(in);
if (status == null || !status.startsWith("HTTP/1.1 200")) {
throw new IOException("CONNECT failed: " + status);
}
drainHeaders(in);
SSLSocket ssl = (SSLSocket) sslFactory().createSocket(proxy, TARGET_HOST, TARGET_PORT, true);
SSLParameters params = ssl.getSSLParameters();
params.setServerNames(java.util.List.of(new SNIHostName(TARGET_HOST)));
ssl.setSSLParameters(params);
ssl.startHandshake();
try (var httpsOut = new BufferedWriter(new OutputStreamWriter(ssl.getOutputStream(), StandardCharsets.ISO_8859_1));
var httpsIn = new BufferedInputStream(ssl.getInputStream())) {
httpsOut.write("GET / HTTP/1.1\r\n");
httpsOut.write("Host: " + TARGET_HOST + "\r\n");
httpsOut.write("User-Agent: JavaRawProxy\r\n");
httpsOut.write("Connection: close\r\n\r\n");
httpsOut.flush();
drainHeaders(httpsIn);
return readBody(httpsIn).trim();
}
}
}
}
private static SSLSocketFactory sslFactory() throws Exception {
if (!INSECURE_TRUST_ALL) return (SSLSocketFactory) SSLSocketFactory.getDefault();
TrustManager[] trustAll = new TrustManager[]{ new X509TrustManager() {
public void checkClientTrusted(java.security.cert.X509Certificate[] c, String a) {}
public void checkServerTrusted(java.security.cert.X509Certificate[] c, String a) {}
public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[0]; }
}};
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, trustAll, new java.security.SecureRandom());
return ctx.getSocketFactory();
}
private static void drainHeaders(InputStream in) throws IOException {
String line;
while ((line = readLine(in)) != null && !line.isEmpty()) {}
}
private static String readBody(InputStream in) throws IOException {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
byte[] tmp = new byte[4096];
int n;
while ((n = in.read(tmp)) != -1) buf.write(tmp, 0, n);
return buf.toString(StandardCharsets.ISO_8859_1);
}
private static String readLine(InputStream in) throws IOException {
StringBuilder sb = new StringBuilder();
int prev = -1, cur;
while ((cur = in.read()) != -1) {
if (prev == '\r' && cur == '\n') { sb.setLength(sb.length() - 1); break; }
sb.append((char) cur); prev = cur;
}
return (sb.length() == 0 && cur == -1) ? null : sb.toString();
}
}
using System.Net;
using System.Net.Sockets;
using System.Net.Security;
using System.Text;
class Program
{
static async Task Main()
{
var url = new Uri("https://ipv4.icanhazip.com");
var proxy = new Uri("http://unblocker.iproyal.com:12323");
const string proxyUser = "username";
const string proxyPass = "password";
using var client = CreateHttpClient(proxy, proxyUser, proxyPass);
var ip = (await client.GetStringAsync(url)).Trim();
Console.WriteLine(ip);
}
private static HttpClient CreateHttpClient(Uri proxyUri, string user, string pass)
{
var handler = new SocketsHttpHandler
{
AllowAutoRedirect = true,
AutomaticDecompression = DecompressionMethods.All,
SslOptions = new SslClientAuthenticationOptions
{
RemoteCertificateValidationCallback = static (_, _, _, _) => true
},
ConnectCallback = async (ctx, ct) =>
{
var tcp = new TcpClient();
await tcp.ConnectAsync(proxyUri.Host, proxyUri.Port);
var stream = tcp.GetStream();
var auth = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{user}:{pass}"));
string host = ctx.DnsEndPoint.Host;
int port = ctx.DnsEndPoint.Port;
var request =
$"CONNECT {host}:{port} HTTP/1.1\r\n" +
$"Host: {host}:{port}\r\n" +
$"Proxy-Authorization: Basic {auth}\r\n" +
"\r\n";
var bytes = Encoding.ASCII.GetBytes(request);
await stream.WriteAsync(bytes, 0, bytes.Length, ct);
await stream.FlushAsync(ct);
using var reader = new StreamReader(stream, Encoding.ASCII, detectEncodingFromByteOrderMarks: false, bufferSize: 4096, leaveOpen: true);
var status = await reader.ReadLineAsync();
if (status is null || !status.Contains(" 200 "))
throw new IOException($"Proxy CONNECT failed: {status}");
while (!string.IsNullOrEmpty(await reader.ReadLineAsync())) { }
return stream;
}
};
var client = new HttpClient(handler)
{
Timeout = TimeSpan.FromSeconds(30)
};
client.DefaultRequestVersion = HttpVersion.Version11;
return client;
}
}
package main
import (
"crypto/tls"
"encoding/base64"
"fmt"
"io"
"net/http"
"net/url"
"time"
)
func main() {
proxyUser := "username"
proxyPass := "password"
proxyStr := "http://unblocker.iproyal.com:12323"
target := "https://ipv4.icanhazip.com"
proxyURL, err := url.Parse(proxyStr)
if err != nil {
panic(err)
}
proxyURL.User = url.UserPassword(proxyUser, proxyPass)
basic := "Basic " + base64.StdEncoding.EncodeToString([]byte(proxyUser+":"+proxyPass))
tr := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
ProxyConnectHeader: http.Header{
"Proxy-Authorization": []string{basic},
},
}
client := &http.Client{
Transport: tr,
Timeout: 30 * time.Second,
}
resp, err := client.Get(target)
if err != nil {
fmt.Println("Request error:", err)
return
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Printf("HTTP %d\n%s\n", resp.StatusCode, string(body))
}
真实客户信赖
我们努力打造市场上最好的住宅代理,提供最无缝的用户体验。我们始终如一地致力于建立信任、保障性能和以客户为中心,从而帮助客户营造一个在所有企业中取得成功的商业环境。
与普通的网络代理相比,IPRoyal 拥有更广泛的功能,包括覆盖超过 195 个国家和地区,在最高级别计划中可选择超过 3200 万个 IP 地址,以及定时自动轮换 IP 和即时更改 IP 等附加选项。
IPRoyal努力保证透明度,并通过各种经济实惠的解决方案和套餐为客户提供一流的服务,并提供全天候支持。
IPRoyal拥有多种不同的订阅选择,一些我们所见过的最实惠的价格,以及响应迅速的支持团队,成为领先的代理服务提供商。
-
IPRoyal 提供卓越的代理服務,擁有廣泛的 IP 位址,使測試、搜尋功能以及存取特定地理位置的資料都非常有效率。我每天都使用它,非常欣賞其穩定的性能、來自全球多個地點的代理可用性以及便捷的設置。他們的定價結構也很有競爭力,服務品質非常高,性價比很高。
Greg D.
總統
-
我從 2023 年開始使用 IPRoyal,他們的服務給我留下了深刻的印象。該平台可靠、高效,並始終提供高品質的效能。無論是他們的代理解決方案還是客戶支持,都超出了我的預期。 IPRoyal 已經成為我工作中不可或缺的一部分,我強烈推薦給所有正在尋找可靠代理服務的人。
Cindy
主管
-
IPRoyal 在社群媒體管理方面表現出色,尤其是在管理我們客戶的 LinkedIn 內容和帳號方面。這款擴充功能的安裝和使用都非常簡單,而且客服反應迅速。我們每天都會使用它,但也會根據需要隨時切換使用方式,並根據需要更改位置。到目前為止,我們非常滿意。我建議您嘗試他們最低的按次付費套餐,親自體驗一下。
Nicolas V.
常務董事
常见问题
IPRoyal的网页解锁器是什么?
PRoyal的网页解锁器是一款AI加持的高级代理服务器解决方案,可自动绕过验证码、Cloudflare、地域封锁及其他反机器人系统,为您自动化、简化公开数据抓取过程,大幅节省时间、人力,保障大规模零中断采集数据。
网页解锁器与普通代理服务器有何不同?
普通代理服务器需手动配置和管理。网页解锁器则能全自动处理验证码、IP轮换、错误重试等全部环节,无需任何其他操作。
网页解锁器需要额外编写代码吗?
不需要。网页解锁器以标准反向连接代理服务器方式运行,直接替换端点接入现有网页抓取项目,即可开始抓取。
网页解锁器请求失败怎么办?
网页解锁器会在后台自动重试新的IP地址或浏览器指纹,大幅降低失败率,提高稳定性。
开始使用需要多长时间?
网页解锁器配置几分钟即可完成。注册账号、下单,将网页解锁器接入您的网页抓取程序即可,无需搭建环境、设施,无需编写代码。