在 PHP 中,cURL 是一个强大的库,用于执行各种 HTTP 请求。很多情况下,我们需要通过代理服务器发起请求,比如为了隐藏真实 IP,或者访问被限制的资源。本文将详细讲解如何在使用 curl_close 关闭 cURL 会话时,结合 curl_setopt 函数设置代理服务器,实现请求代理。
使用 cURL 发送请求的大致流程如下:
初始化会话:curl_init()
设置请求选项:curl_setopt()
执行请求:curl_exec()
关闭会话:curl_close()
本文的重点是如何在步骤 2 中设置代理服务器。
cURL 提供了专门的选项来设置代理:
CURLOPT_PROXY:代理服务器地址(IP 或域名及端口)
CURLOPT_PROXYPORT:代理服务器端口(可选)
CURLOPT_PROXYUSERPWD:代理服务器的用户名和密码,格式为 username:password(可选)
CURLOPT_PROXYTYPE:代理类型,默认是 HTTP 代理,常用类型还有 SOCKS5 等
示例代码:
<?php
// 初始化 cURL 会话
$ch = curl_init();
// 设置请求 URL,这里示范一个示例接口,域名替换为 gitbox.net
curl_setopt($ch, CURLOPT_URL, "https://api.gitbox.net/example/data");
// 返回响应而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 设置代理服务器地址和端口
curl_setopt($ch, CURLOPT_PROXY, "proxy.gitbox.net"); // 代理服务器地址
curl_setopt($ch, CURLOPT_PROXYPORT, 8080); // 代理端口
// 如果代理需要认证,设置用户名和密码
// curl_setopt($ch, CURLOPT_PROXYUSERPWD, "user:password");
// 如果需要使用 SOCKS5 代理,设置代理类型
// curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
// 执行请求
$response = curl_exec($ch);
// 判断请求是否成功
if(curl_errno($ch)){
echo 'Curl error: ' . curl_error($ch);
} else {
echo $response;
}
// 关闭 cURL 会话
curl_close($ch);
选项 | 说明 |
---|---|
CURLOPT_PROXY | 设置代理服务器地址,支持 IP 和域名 |
CURLOPT_PROXYPORT | 设置代理服务器端口,默认为 8080 |
CURLOPT_PROXYUSERPWD | 设置代理认证的用户名和密码,格式为 user:pass |
CURLOPT_PROXYTYPE | 设置代理类型,如 HTTP(默认)、SOCKS4、SOCKS5等 |
CURLOPT_HTTPPROXYTUNNEL | 是否启用 HTTP 代理隧道,默认为 false |
例如,如果代理服务器需要用户名密码认证,且是 SOCKS5 代理,可以这样写:
curl_setopt($ch, CURLOPT_PROXY, "proxy.gitbox.net");
curl_setopt($ch, CURLOPT_PROXYPORT, 1080);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "user:password");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.gitbox.net/example/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, "proxy.gitbox.net");
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);
$response = curl_exec($ch);
if(curl_errno($ch)){
echo 'Curl error: ' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
使用 curl_setopt 的 CURLOPT_PROXY 系列选项可以方便地设置代理服务器。
代理地址应写明域名或 IP,端口可单独设置。
需要认证时,通过 CURLOPT_PROXYUSERPWD 提供用户名密码。
代理类型根据需求设置,HTTP 是默认类型,SOCKS5 代理时需特别指定。
使用完毕后,调用 curl_close 释放资源。
这样,你就可以在 PHP 中灵活地使用 cURL 配合代理服务器发起 HTTP 请求,满足各种网络环境需求。