PHP调用REST API如何拼接24小时时段ISO 8601格式时间参数生成请求URL
修复方案
原有代码错误点
- PHP语法错误:
date()调用未传入必填的格式参数,且URL拼接末尾多了多余的.符号,直接触发PHP代码运行异常,返回500状态码 - 时间逻辑错误:原有代码仅提取年月日拼接固定0点时间,不符合「24小时前到当前时间」的需求,也未生成符合接口要求的完整ISO 8601格式时间
- URL拼接错误:使用HTML转义符
&作为参数分隔符,PHP发送HTTP请求时应直接使用&作为参数分隔符
正确实现代码
<?php // 配置时区,若接口要求UTC时间可改为UTC date_default_timezone_set('Asia/Shanghai'); // 生成24小时前的ISO 8601格式时间 $from = date('Y-m-d\TH:i:s', strtotime('-24 hours')); // 生成当前时间的ISO 8601格式时间 $to = date('Y-m-d\TH:i:s'); // 拼接请求URL $url = 'https://cloud.aeroqual.com/api/data/AQM65%2017112020-804?from=' . $from . '&to=' . $to . '&averagingperiod=60&includejournal=false'; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_HTTPHEADER => array( 'Cookie: .MONOAUTH=C5PBclbeW29kqexXRGTlXaHImDoLhxR/YzALxc44/SZ+KQV2XuMsZps6OJnXMSi56gjRsQ6ED6GIcH7Fk8XCoJ80IrpsTUDPO+Bmf0tVKaPZtIzpwe7ff3QqBKZLFGZK; ASP.NET_SessionId=9F89912F7F571A228B63ACEC; AWSELB=95CB9B4302EC8CCB93BD1C1D5C4630880B3D9B3CCF5F0CE3F60EF45F0604C252A119CAE7D802D28AE24434CB392308307A6E5617B4045026B161BDB6886AF9E5C0388BFFED; AWSELBCORS=95CB9B4302EC8CCB93BD1C1D5C4630880B3D9B3CCF5F0CE3F60EF45F0604C252A119CAE7D802D28AE24434CB392308307A6E5617B4045026B161BDB6886AF9E5C0388BFFED' ), )); $response = curl_exec($curl); curl_close($curl); echo $response; ?>
常见疑问解答
- cURL完全支持传入变量作为请求URL,只要变量值符合URL规范即可正常发起请求
- 时间格式字符串中的
\T是为了原样输出T字符,避免被date()函数解析为时间参数 - 若接口对时间时区有要求,调整
date_default_timezone_set的参数即可适配
内容的提问来源于stack exchange,提问作者Periklis Kakarakidis
相关产品推荐
相关产品推荐

