美文网首页
HTTP status 302 引发的 CURL respons

HTTP status 302 引发的 CURL respons

作者: fingerQin | 来源:发表于2021-02-17 11:38 被阅读0次

    一、背景描述

    最近我们公司的系统需要对接第三方平台提供的接口。然后根据接口响应的结果更新我们平台数据库的状态。对方接口只允许 GET 请求。通过 URL 地址拼接一系列参数进行业务的处理。

    一切似乎很简单。我们通过浏览器进行 URL 直接进行请求能直接响应结果。当我们用 CURL 请求的时候,却始终得不到任何结果。也不存在任何 CURL 的错误。

    二、问题分析

    (1)我们的代码如下:

    <?php
    $url = '接口请求地址';
    $ch  = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POST, false);
    $output = curl_exec($ch);
    curl_close($ch);
    var_dump($output);
    

    输出如下结果:

    string(0) ""
    

    (2)开启调试模式

    <?php
    $url = '接口请求地址';
    $ch  = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POST, false);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    var_dump($output);
    

    我们在第 (1) 的代码中多加了一行代码:

    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    

    这样我们就能得到整个请求与响应的细节信息输出:

    从上图我们可以看出,HTTP 状态码并不是我们常见的 200。于是,我特地了解了一下这个 302 状态码。它的功能是告诉浏览器我们要进行 location 跳转。这个跳转指的是浏览器地址栏不变化的跳转。所以,当我们在浏览器直接请求的时候有数据。而通过 CURL 请求的时候,死活都拿不到数据的原因就在这里。因为,我们的 CURL 只拿了第一个地址的响应。

    注:http status 301 也是告诉浏览器跳转。这个跳转与 302 的区别:301 跳转浏览器地址栏会发生改变。而 302 不会。

    原因我们现在已经找到了。现在我们就解决它。

    三、解决 302

    既然 CURL 已经进行了隐示跳转。那么有没有办法通过 CURL 获取跳转后的 URL 后响应结果呢?
    答案:有。

    我们更改后的代码如下:

    <?php
    $url = '接口请求地址';
    $ch  = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_POST, false);
    $output = curl_exec($ch);
    curl_close($ch);
    var_dump($output);
    

    我们在第(1)中的代码加了如下代码:

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    

    官方是这样解释的:

    TRUE 时将会根据服务器返回 HTTP 头中的 "Location: " 重定向。(注意:这是递归的,"Location: " 发送几次就重定向几次,除非设置了 CURLOPT_MAXREDIRS,限制最大重定向次数。)。

    这时候我们再通过 CURL 请求的时候就能得到响应数据问题了。

    相关文章

      网友评论

          本文标题:HTTP status 302 引发的 CURL respons

          本文链接:https://www.haomeiwen.com/subject/pdrmtltx.html