欢迎各位兄弟 发布技术文章
这里的技术是共享的
要获取跳转后的数据,可以使用 CURLOPT_FOLLOWLOCATION
选项,它会让 cURL 自动跟随重定向,并返回最终的响应内容。此外,还可以使用 CURLOPT_MAXREDIRS
来限制最大重定向次数,以避免无限重定向的问题。
以下是修改后的代码:
php
function _curl_by_mac_get_ip_from_dhcp($mac) { $rurl = "http://aaa.bbbb.com/list_dhcps?field_dhcp_server_ip_value=All&field_jses_device_name_value=&field_jses_ip_address_value=&field_jses_mac_value={$mac}&field_jses_net_area_value=&field_jses_dhcp_netlevel_value=&name=&field_full_name_value=&field_jses_lease_expires_value="; $ch = curl_init(); // 处理 COOKIE $cookie = ''; foreach ($_COOKIE as $key => $value) { $cookie .= "$key=$value; "; } // 设置 cURL 选项 $options = array( CURLOPT_URL => $rurl, CURLOPT_COOKIE => $cookie, CURLOPT_RETURNTRANSFER => true, // 返回结果而不是直接输出 CURLOPT_FOLLOWLOCATION => true, // 跟随重定向 CURLOPT_MAXREDIRS => 10 // 最大重定向次数 ); curl_setopt_array($ch, $options); // 执行请求并获取响应 $ret = curl_exec($ch); // 检查是否有错误发生 if (curl_errno($ch)) { $error_msg = curl_error($ch); curl_close($ch); throw new Exception("cURL 请求失败: " . $error_msg); } // 获取最终的 URL $final_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); curl_close($ch); // 返回响应内容和最终的 URL return [ 'content' => $ret, 'final_url' => $final_url ]; }
CURLOPT_FOLLOWLOCATION
:
设置为 true
,让 cURL 自动跟随重定向。
CURLOPT_MAXREDIRS
:
限制重定向的最大次数,默认设置为 10。
CURLINFO_EFFECTIVE_URL
:
使用 curl_getinfo()
获取最终的 URL,便于调试或记录。
错误处理:
检查 curl_errno()
是否有错误发生,并抛出异常或记录日志。
php
try { $result = _curl_by_mac_get_ip_from_dhcp('00:11:22:33:44:55'); echo "最终 URL: " . $result['final_url'] . "\n"; echo "响应内容: " . $result['content']; } catch (Exception $e) { echo "错误: " . $e->getMessage(); }
如果目标服务器需要验证 SSL,请确保启用 CURLOPT_SSL_VERIFYPEER
和 CURLOPT_SSL_VERIFYHOST
。
如果请求涉及大量数据或复杂逻辑,可以考虑添加超时设置(如 CURLOPT_TIMEOUT
)。