批量调用Viator API获取产品信息时语法错误致404/405报错求助
问题解决:批量产品接口调用的参数传递错误
你的核心问题是错误地将产品代码数组作为URL查询参数拼接,而API要求通过POST请求的JSON请求体来传递productCodes数组,这直接导致了404/405错误。以下是修正后的代码及关键说明:
错误原因分析
- API文档明确要求请求体是包含
productCodes数组的JSON对象,但你把数组直接拼在URL末尾,不符合接口的参数接收规则 - POST请求的参数如果放在URL查询字符串中,会被接口识别为无效请求,进而返回404(路径匹配失败)或405(请求方法不允许)
修正后的Dart代码
// Product codes const List<String> productCodes = [ '58109P2', '127269P1', '127269P1', '250556P1', '204123P16', ]; try { var response = await http.post( Uri.parse("https://api.viator.com/partner/products/bulk"), headers: { ...headers, // 保留你原有的授权等请求头 'Content-Type': 'application/json', // 必须添加该头,告知服务器请求体为JSON格式 }, body: json.encode({ 'productCodes': productCodes, // 按API要求包装成JSON结构 }), ); if (response.statusCode == 200) { var jsonData = json.decode(response.body); print(jsonData); } else { print('请求失败,状态码:${response.statusCode}'); print('响应内容:${response.body}'); // 打印响应内容便于排查具体错误 } } catch (e) { print('请求异常:$e'); }
关键修改点
- 移除URL中的参数拼接:接口路径就是
/partner/products/bulk,无需在URL后附加任何参数 - 添加Content-Type请求头:必须设置为
application/json,否则服务器无法正确解析请求体 - 通过body传递JSON数据:用
json.encode()将包含productCodes的Map转为JSON字符串,作为POST请求的body参数
内容的提问来源于stack exchange,提问作者JohnnyQ
相关产品推荐
相关产品推荐

