PHP cURL调用Rubiproject API超时及返回空值问题求助
问题分析与解决方案
你的PHP cURL代码存在两个关键问题,导致了超时和返回为空的现象:
1. 核心冲突:CURLOPT_FILE与CURLOPT_RETURNTRANSFER互斥
当你同时设置CURLOPT_RETURNTRANSFER => true(要求curl_exec()返回响应字符串)和CURLOPT_FILE => $fp(要求将响应写入文件)时,这两个选项会互相覆盖,最终导致$response为空。此外,代码中未初始化$fp变量,也会引发潜在异常。
2. 超时时间设置不合理
原代码中CURLOPT_TIMEOUT => 50(50秒)不足以接收完整的272KB数据,导致超时;调整为500000秒又过于夸张,建议设置为合理的300秒(5分钟)即可。
修正后的完整代码
<?php // 初始化cURL资源 $curl = curl_init(); // 配置cURL选项 curl_setopt_array($curl, array( CURLOPT_URL => "https://api.rubiproject.com/analytics/v1/report/?account=publisher%2F11990&start=2022-09-01T00%3A00%3A00-08%3A00&end=2022-09-02T23%3A59%3A59-08%3A00&dimensions=date%2Ccountry%2Csite&metrics=ad_requests%2Cauctions_won%2Cpaid_impression%2Crevenue", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 300, // 合理调整超时时间为5分钟 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "authorization: Basic YjA2MzljMzJmYWM0OTA2ssssssssZWNmMjJiZjY0YjljZZWU4NzlkBMGVhMzkxODo0sswwNjk1OTc5YjRlYTaI1NWIyM2Y5NWFlZDE1M2YzODI0Yw==", "cache-control: no-cache" // GET请求无需content-type头,若Postman中确实存在可保留 ), CURLOPT_FOLLOWLOCATION => true )); // 执行请求并获取响应 $response = curl_exec($curl); $err = curl_error($curl); // 关闭cURL资源 curl_close($curl); // 处理结果 if ($err) { echo "cURL错误: " . $err; } else { print_r($response); } ?>
额外注意事项
- 若需要将响应写入文件,需移除
CURLOPT_RETURNTRANSFER,并提前初始化文件指针:$fp = fopen('report_data.json', 'w'); // 然后添加CURLOPT_FILE => $fp到选项数组中 - 检查授权头是否正确(代码中已隐去部分字符,请确保实际使用完整有效的Base64编码凭证)。
- 若仍有问题,可开启cURL的调试模式(添加
CURLOPT_VERBOSE => true),查看详细的请求/响应日志,进一步排查问题。
内容的提问来源于stack exchange,提问作者Mayank Sudden
相关产品推荐
相关产品推荐

