You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量调用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');
}

关键修改点

  1. 移除URL中的参数拼接:接口路径就是/partner/products/bulk,无需在URL后附加任何参数
  2. 添加Content-Type请求头:必须设置为application/json,否则服务器无法正确解析请求体
  3. 通过body传递JSON数据:用json.encode()将包含productCodes的Map转为JSON字符串,作为POST请求的body参数

内容的提问来源于stack exchange,提问作者JohnnyQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 08:15:37