调用Skiddle API时出现301 Moved Permanently错误,求技术支持
技术建议
1. 替换API地址为HTTPS协议
301响应明确指向HTTPS地址,说明Skiddle API已不再支持HTTP访问,直接修改地址协议可避免重定向:
class Skiddle { // 把http替换为https const EVENTS_SEARCH_URL = 'https://www.skiddle.com/api/v1/events/search/'; // ... 其他代码不变 }
2. 让cURL自动跟随重定向
当前cURL配置未开启重定向跟随,添加CURLOPT_FOLLOWLOCATION参数,自动处理301/302跳转:
curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HEADER => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => $url, CURLOPT_SSL_VERIFYPEER => false, // 添加这一行 CURLOPT_FOLLOWLOCATION => true ]);
注:若服务器启用
open_basedir或safe_mode,该选项可能失效,此时可手动解析Location头重新发起请求。
3. 修复可变静态属性访问的语法错误
Skiddle类中访问Locations静态属性的写法存在语法错误,Locations::$$location['latitude']会导致解析异常,正确写法如下:
if ($location) { // 修正可变属性访问语法 $locationData = Locations::${$location}; $params['latitude'] = $locationData['latitude']; $params['longitude'] = $locationData['longitude']; $params['radius'] = $locationData['radius']; }
拆分变量赋值更清晰,同时避免嵌套解析错误。
4. 优化响应头与响应体的拆分逻辑
当前用explode("\r\n\r\n", $response, 2)拆分头和体,若响应头存在多个空行(部分代理场景可能出现)会导致解析失败,改用curl头信息大小拆分更可靠:
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $headerSize); $rawBody = substr($response, $headerSize);
内容的提问来源于stack exchange,提问作者Jayy
相关产品推荐
相关产品推荐

