php curl遇到重定向怎么办

fiy 其他 456

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    PHP cURL遇到重定向时,可以通过设置相应的选项来处理。

    重定向是HTTP协议中常见的一种机制,当服务器返回特定的状态码时,客户端将按照服务器指定的新地址重新发送请求。在使用cURL时,可以通过以下方法来处理重定向。

    1. 设置选项 CURLOPT_FOLLOWLOCATION 为 true:
    “`
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    “`
    这个选项告诉cURL在遇到重定向时自动跟随新地址。

    2. 设置选项 CURLOPT_MAXREDIRS 来限制重定向的次数:
    “`
    curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
    “`
    这个选项可以设置重定向的最大次数,避免无限循环的情况发生。默认情况下,cURL会跟随无限次数的重定向。

    3. 获取重定向后的URL:
    如果你想获取重定向后的URL,你可以设置选项 CURLOPT_RETURNTRANSFER 为 true,并使用 CURLOPT_HEADER 来告诉cURL在返回结果中包含HTTP头信息:
    “`
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    “`
    然后,你需要将返回的结果分解成头信息和响应体。可以通过以下方法来获取重定向后的URL:
    “`php
    $info = curl_getinfo($ch);
    $redirectedUrl = $info[‘url’];
    “`

    以上就是处理PHP cURL遇到重定向的一些方法。根据实际情况选择适合的方法来处理重定向,以确保请求能够正常完成。

    2年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    当使用PHP的cURL库进行网络请求时,如果遇到重定向,可以通过以下方法处理:

    1. 使用cURL的`CURLOPT_FOLLOWLOCATION`选项来自动跟随重定向。将该选项设置为true即可。示例代码如下:

    “`php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, ‘http://example.com’);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $result = curl_exec($ch);
    curl_close($ch);
    “`

    2. 如果cURL的`CURLOPT_FOLLOWLOCATION`选项无效,可以手动处理重定向。通过在HTTP响应头中查找`Location`字段,获取重定向的URL,然后重新发送请求。示例代码如下:

    “`php
    function curlFollowRedirect($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    $response = curl_exec($ch);
    $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $header = substr($response, 0, $headerSize);
    $body = substr($response, $headerSize);
    curl_close($ch);

    $locationHeader = null;
    preg_match(‘/Location: (.*?)\n/’, $header, $matches);
    if (isset($matches[1])) {
    $locationHeader = trim($matches[1]);
    }

    if ($locationHeader) {
    return curlFollowRedirect($locationHeader);
    } else {
    return $body;
    }
    }

    $result = curlFollowRedirect(‘http://example.com’);
    “`

    3. 可以使用cURL的`CURLOPT_MAXREDIRS`选项来限制重定向的最大次数。通过将该选项设置为一个正整数,将限制重定向的次数。示例代码如下:

    “`php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, ‘http://example.com’);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
    $result = curl_exec($ch);
    curl_close($ch);
    “`

    4. 可以使用cURL的`CURLOPT_COOKIEJAR`和`CURLOPT_COOKIEFILE`选项来处理重定向过程中的cookie。`CURLOPT_COOKIEJAR`选项用于保存cookie,`CURLOPT_COOKIEFILE`选项用于加载cookie。示例代码如下:

    “`php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, ‘http://example.com’);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, ‘cookie.txt’);
    curl_setopt($ch, CURLOPT_COOKIEFILE, ‘cookie.txt’);
    $result = curl_exec($ch);
    curl_close($ch);
    “`

    5. 当遇到重定向时,可以使用cURL的`CURLOPT_HEADER`选项来获取完整的HTTP响应头。通过将该选项设置为true,可以在结果中包含响应头。示例代码如下:

    “`php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, ‘http://example.com’);
    curl_setopt($ch, CURLOPT_HEADER, true);
    $result = curl_exec($ch);
    curl_close($ch);

    list($header, $body) = explode(“\r\n\r\n”, $result, 2);

    // 处理响应头
    $headers = explode(“\r\n”, $header);
    foreach ($headers as $headerLine) {
    echo $headerLine . “\n”;
    }

    // 处理响应体
    echo $body;
    “`

    这些方法可以帮助您在使用PHP的cURL库时有效处理重定向。根据您的具体需求选择适合的方法进行处理。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    当使用PHP的CURL库进行网络请求时,如果遇到重定向,我们有多种方法处理。下面是一种常见的方法:

    1. 设置CURLOPT_FOLLOWLOCATION选项为TRUE
    在使用CURL进行请求之前,我们可以设置CURLOPT_FOLLOWLOCATION选项为TRUE,以允许CURL自动跟随重定向。这可以通过以下代码实现:

    “`php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    “`

    2. 获取重定向URL
    我们还可以通过CURLOPT_HEADER选项来获取重定向URL。首先,我们需要将CURLOPT_HEADER选项设置为TRUE以获取HTTP头信息。然后,我们可以使用函数curl_getinfo()来获取最终请求的URL。以下是代码示例:

    “`php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_exec($ch);
    $redirectUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    “`

    3. 自定义重定向处理函数
    使用CURLOPT_FOLLOWLOCATION选项可能会导致CURL无法处理某些重定向情况,如重定向循环。为了更好地控制重定向过程,我们可以定义自己的重定向处理函数。以下是一个示例:

    “`php
    function handleRedirect($ch, $redirectUrl)
    {
    // 自定义重定向处理逻辑
    // …
    // 返回FALSE表示不再进行重定向
    return false;
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
    curl_setopt($ch, CURLOPT_HEADERFUNCTION, “handleRedirect”);
    “`

    通过定义自己的重定向处理函数,我们可以根据需要执行想要的操作,并决定是否继续进行重定向。

    无论选择哪种方法,我们都可以通过组合使用CURLOPT_FOLLOWLOCATION选项、获取重定向URL和自定义重定向处理函数来处理PHP CURL遇到重定向时的情况。根据具体需求选择适合的处理方式。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部