内容简介:最近我们公司的系统需要对接第三方平台提供的接口。然后根据接口响应的结果更新我们平台数据库的状态。对方接口只允许 GET 请求。通过 URL 地址拼接一系列参数进行业务的处理。一切似乎很简单。我们通过浏览器进行 URL 直接进行请求能直接响应结果。当我们用 CURL 请求的时候,却始终得不到任何结果。也不存在任何 CURL 的错误。输出如下结果:
一、背景描述
最近我们公司的系统需要对接第三方平台提供的接口。然后根据接口响应的结果更新我们平台数据库的状态。对方接口只允许 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 response 空白问题思考》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Unicode空白是否有Python常量?
- EmptyPage(空白页组件)原理与使用
- ios – UITableView在顶部获得了空白[封闭]
- RecyclerView瀑布流空白、重新排序原因及解决办法
- idea jsp html 空白页的问题
- 利用空白gif图片,实现数据上报,数据埋点
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C语言算法速查手册
程晓旭、耿鲁静、张海、王勇 / 2009-10 / 49.00元
《C语言算法速查手册》用C语言编写了科研和工程中最常用的166个算法,这些算法包括复数运算、多项式的计算、矩阵运算、线性代数方程组的求解、非线性方程与方程组的求解、代数插值法、数值积分法、常微分方程(组)初值问题的求解、拟合与逼近、特殊函数、极值问题、随机数产生与统计描述、查找、排序、数学变换与滤波等。同时结合这些算法列举了将近100个应用实例,对其进行验证和分析。 《C语言算法速查手册》适......一起来看看 《C语言算法速查手册》 这本书的介绍吧!