如何在Flutter HTTP请求中添加Header?调用RapidAPI接口报错求助
问题原因
- 你没有按照接口要求传递必填的请求头,接口要求的
X-Rapidapi-Host、X-Rapidapi-Key两个头字段缺失,错误将密钥赋值给了Accept头字段,导致服务端无法识别你的请求身份,直接拒绝访问。 - 如果你的代码运行在web端,需确保没有额外的跨域拦截规则,RapidAPI官方接口默认支持跨域调用,只要头配置正确即可正常请求。
修复后代码示例
import 'package:http/http.dart' as http; import 'dart:io'; // 要在标注了async的函数内运行 Future<void> fetchCourses(String keyword) async { var client = http.Client(); try { final response = await client.get( Uri.parse( 'https://learning-objects-v2.p.rapidapi.com/search-provider?keywords=$keyword&lang=en&provider=Coursera&sort=popularity&model=strict&max=20&page=2'), headers: { // 按照接口要求添加两个必填头 'X-Rapidapi-Host': 'learning-objects-v2.p.rapidapi.com', 'X-Rapidapi-Key': '替换成你自己的RapidAPI真实密钥', HttpHeaders.acceptHeader: 'application/json', // 按需设置Accept头,不要填入密钥 }, ); if (response.statusCode == 200) { // 请求成功,处理返回结果 print(response.body); } else { // 打印错误信息方便排查 print('请求失败,状态码:${response.statusCode},错误信息:${response.body}'); } } catch (e) { print('请求发生异常:$e'); } finally { client.close(); } }
额外注意事项
- 请将代码里的
替换成你自己的RapidAPI真实密钥替换为你在RapidAPI平台申请的实际可用Key,不要直接使用示例里的占位符。 - 调用该函数的位置需要添加
await关键字,且所在函数必须有async标注。 - 记得在
pubspec.yaml里添加http库的依赖。
内容的提问来源于stack exchange,提问作者Prem
相关产品推荐
相关产品推荐

