通过PHP语言配置IPNut 代理:
进入 IPNut 平台购买并获取信息,这里以静态IP为例(假如端口是 http://proxy.ipnut.com:28001,账号: ipnut,密码: 123456789)。
1. SOCKS5代理示例 #
'http://httpbin.org/ip',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_PROXY => $this->proxy_host . ':' . $this->proxy_port,
CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5,
CURLOPT_PROXYUSERPWD => $this->proxy_username . ':' . $this->proxy_password,
CURLOPT_USERAGENT => 'PHP-SOCKS5-Proxy/1.0',
CURLOPT_SSL_VERIFYPEER => false, // 仅测试使用
CURLOPT_SSL_VERIFYHOST => false
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_error($ch)) {
throw new Exception('cURL错误: ' . curl_error($ch));
}
echo "状态码: " . $httpCode . "\n";
echo "响应内容: " . $response . "\n";
} catch (Exception $e) {
echo "请求失败: " . $e->getMessage() . "\n";
} finally {
curl_close($ch);
}
}
/**
* SOCKS5代理多请求演示
*/
public function socks5MultipleRequests() {
echo "\n=== SOCKS5代理多请求演示 ===\n";
$urls = [
'http://httpbin.org/ip',
'http://httpbin.org/user-agent',
'http://httpbin.org/headers'
];
foreach ($urls as $index => $url) {
echo "\n请求 " . ($index + 1) . ": " . $url . "\n";
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_PROXY => $this->proxy_host . ':' . $this->proxy_port,
CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5,
CURLOPT_PROXYUSERPWD => $this->proxy_username . ':' . $this->proxy_password,
CURLOPT_USERAGENT => 'PHP-SOCKS5-Multi/1.0',
CURLOPT_SSL_VERIFYPEER => false
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_error($ch)) {
echo "请求失败: " . curl_error($ch) . "\n";
} else {
echo "状态码: " . $httpCode . "\n";
$data = json_decode($response, true);
echo "响应摘要: " . substr($response, 0, 150) . "...\n";
}
curl_close($ch);
sleep(1); // 避免请求过快
}
}
/**
* SOCKS5代理自定义请求
*/
public function socks5CustomRequest() {
echo "\n=== SOCKS5代理自定义请求 ===\n";
$ch = curl_init();
try {
$headers = [
'User-Agent: PHP-SOCKS5-Custom/1.0',
'Accept: application/json',
'Content-Type: application/json'
];
curl_setopt_array($ch, [
CURLOPT_URL => 'https://httpbin.org/post',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_PROXY => $this->proxy_host . ':' . $this->proxy_port,
CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5,
CURLOPT_PROXYUSERPWD => $this->proxy_username . ':' . $this->proxy_password,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'name' => 'ipnut_user',
'email' => 'user@ipnut.com',
'message' => '测试SOCKS5代理连接'
]),
CURLOPT_HTTPHEADER => $headers,
CURLOPT_SSL_VERIFYPEER => false
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_error($ch)) {
throw new Exception('cURL错误: ' . curl_error($ch));
}
echo "状态码: " . $httpCode . "\n";
echo "响应内容: " . $response . "\n";
} catch (Exception $e) {
echo "POST请求失败: " . $e->getMessage() . "\n";
} finally {
curl_close($ch);
}
}
/**
* 运行所有SOCKS5演示
*/
public function runAll() {
echo "开始SOCKS5代理测试...\n\n";
$this->socks5WithCurl();
$this->socks5MultipleRequests();
$this->socks5CustomRequest();
echo "\nSOCKS5代理测试完成!\n";
}
}
// 运行SOCKS5演示
$socks5Demo = new Socks5ProxyDemo();
$socks5Demo->runAll();
?>
2. HTTP代理示例 #
'http://httpbin.org/ip',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_PROXY => $this->proxy_host . ':' . $this->proxy_port,
CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
CURLOPT_PROXYAUTH => CURLAUTH_BASIC,
CURLOPT_PROXYUSERPWD => $this->proxy_username . ':' . $this->proxy_password,
CURLOPT_USERAGENT => 'PHP-HTTP-Proxy/1.0',
CURLOPT_SSL_VERIFYPEER => false
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_error($ch)) {
throw new Exception('cURL错误: ' . curl_error($ch));
}
echo "状态码: " . $httpCode . "\n";
echo "响应内容: " . $response . "\n";
} catch (Exception $e) {
echo "请求失败: " . $e->getMessage() . "\n";
} finally {
curl_close($ch);
}
}
/**
* HTTP代理上下文流
*/
public function httpWithStream() {
echo "\n=== 使用流上下文的HTTP代理 ===\n";
try {
// 创建流上下文
$context = stream_context_create([
'http' => [
'proxy' => 'tcp://' . $this->proxy_host . ':' . $this->proxy_port,
'request_fulluri' => true,
'header' => [
'Proxy-Authorization: Basic ' . base64_encode($this->proxy_username . ':' . $this->proxy_password),
'User-Agent: PHP-Stream-Proxy/1.0'
],
'timeout' => 30
],
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
]);
$response = file_get_contents('http://httpbin.org/ip', false, $context);
// 获取HTTP状态码
$statusLine = $http_response_header[0] ?? '';
preg_match('/HTTP\/\d\.\d\s+(\d+)/', $statusLine, $matches);
$httpCode = $matches[1] ?? '未知';
echo "状态码: " . $httpCode . "\n";
echo "响应内容: " . $response . "\n";
} catch (Exception $e) {
echo "流请求失败: " . $e->getMessage() . "\n";
}
}
/**
* HTTP代理多请求演示
*/
public function httpMultipleRequests() {
echo "\n=== HTTP代理多请求演示 ===\n";
$urls = [
'http://httpbin.org/ip',
'http://httpbin.org/user-agent',
'http://httpbin.org/get?param1=value1¶m2=value2'
];
$multiHandle = curl_multi_init();
$handles = [];
foreach ($urls as $index => $url) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_PROXY => $this->proxy_host . ':' . $this->proxy_port,
CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
CURLOPT_PROXYUSERPWD => $this->proxy_username . ':' . $this->proxy_password,
CURLOPT_USERAGENT => 'PHP-HTTP-Multi/1.0',
CURLOPT_SSL_VERIFYPEER => false
]);
curl_multi_add_handle($multiHandle, $ch);
$handles[$index] = $ch;
}
// 执行多请求
$running = null;
do {
curl_multi_exec($multiHandle, $running);
curl_multi_select($multiHandle);
} while ($running > 0);
// 处理结果
foreach ($handles as $index => $ch) {
echo "\n请求 " . ($index + 1) . ": " . $urls[$index] . "\n";
$response = curl_multi_getcontent($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_error($ch)) {
echo "请求失败: " . curl_error($ch) . "\n";
} else {
echo "状态码: " . $httpCode . "\n";
echo "响应摘要: " . substr($response, 0, 150) . "...\n";
}
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
curl_multi_close($multiHandle);
}
/**
* HTTP代理POST请求
*/
public function httpPostRequest() {
echo "\n=== HTTP代理POST请求 ===\n";
$ch = curl_init();
try {
$postData = [
'name' => 'ipnut_user',
'email' => 'user@ipnut.com',
'message' => '测试HTTP代理POST请求'
];
$headers = [
'Content-Type: application/json',
'User-Agent: PHP-HTTP-POST/1.0'
];
curl_setopt_array($ch, [
CURLOPT_URL => 'https://httpbin.org/post',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_PROXY => $this->proxy_host . ':' . $this->proxy_port,
CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
CURLOPT_PROXYUSERPWD => $this->proxy_username . ':' . $this->proxy_password,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($postData),
CURLOPT_HTTPHEADER => $headers,
CURLOPT_SSL_VERIFYPEER => false
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_error($ch)) {
throw new Exception('cURL错误: ' . curl_error($ch));
}
echo "状态码: " . $httpCode . "\n";
$result = json_decode($response, true);
echo "响应数据: \n";
print_r($result['json'] ?? $response);
} catch (Exception $e) {
echo "POST请求失败: " . $e->getMessage() . "\n";
} finally {
curl_close($ch);
}
}
/**
* 运行所有HTTP演示
*/
public function runAll() {
echo "开始HTTP代理测试...\n\n";
$this->httpWithCurl();
$this->httpWithStream();
$this->httpMultipleRequests();
$this->httpPostRequest();
echo "\nHTTP代理测试完成!\n";
}
}
// 运行HTTP演示
$httpDemo = new HttpProxyDemo();
$httpDemo->runAll();
?>
3. 代理测试工具 #
'http://httpbin.org/ip',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_PROXY => $this->proxy_host . ':' . $this->proxy_port,
CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5,
CURLOPT_PROXYUSERPWD => $this->proxy_username . ':' . $this->proxy_password,
CURLOPT_SSL_VERIFYPEER => false
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_error($ch)) {
echo "❌ SOCKS5 代理连接失败: " . curl_error($ch) . "\n";
} else {
echo "✅ SOCKS5 代理连接成功\n";
echo " 状态码: " . $httpCode . "\n";
$data = json_decode($response, true);
echo " 当前IP: " . ($data['origin'] ?? '未知') . "\n";
}
curl_close($ch);
}
/**
* 测试HTTP代理
*/
public function testHttpProxy() {
echo "\n测试 HTTP 代理:\n";
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'http://httpbin.org/ip',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_PROXY => $this->proxy_host . ':' . $this->proxy_port,
CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
CURLOPT_PROXYUSERPWD => $this->proxy_username . ':' . $this->proxy_password,
CURLOPT_SSL_VERIFYPEER => false
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (curl_error($ch)) {
echo "❌ HTTP 代理连接失败: " . curl_error($ch) . "\n";
} else {
echo "✅ HTTP 代理连接成功\n";
echo " 状态码: " . $httpCode . "\n";
$data = json_decode($response, true);
echo " 当前IP: " . ($data['origin'] ?? '未知') . "\n";
}
curl_close($ch);
}
/**
* 运行测试
*/
public function runTests() {
echo "=== 代理测试工具 ===\n\n";
$this->testSocks5Proxy();
$this->testHttpProxy();
echo "\n代理测试完成!\n";
}
}
// 运行测试工具
$testTool = new ProxyTestTool();
$testTool->runTests();
?>
4. 主程序文件 #
runTests();
echo "\n" . str_repeat("=", 50) . "\n\n";
// 运行SOCKS5演示
$socks5Demo = new Socks5ProxyDemo();
$socks5Demo->runAll();
echo "\n" . str_repeat("=", 50) . "\n\n";
// 运行HTTP演示
$httpDemo = new HttpProxyDemo();
$httpDemo->runAll();
echo "\n所有演示完成!\n";
}
}
// 运行主程序
$main = new MainProgram();
$main->run();
?>
5. 运行方式: #
#文件结构:
#proxy_demo/
#├── Socks5ProxyDemo.php # SOCKS5代理演示
#├── HttpProxyDemo.php # HTTP代理演示
#├── ProxyTestTool.php # 代理测试工具
#└── main.php # 主程序入口
# bash
# 1.单独运行SOCKS5演示:
php Socks5ProxyDemo.php
# 2.单独运行HTTP演示:
php HttpProxyDemo.php
# 3.运行测试工具:
php ProxyTestTool.php
# 4.运行完整演示:
php main.php