欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

curl 当跳转时 获得跳转后的数据 sidebar chatgpt 有大用 有大大用

要获取跳转后的数据,可以使用 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    ]; }

关键点说明:

  1. 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)。


    普通分类: