Flutter中dart http包POST请求未自动重定向获取目标页面内容问题
解决Flutter http包POST请求302重定向不自动跟进的问题
dart的http包默认不会自动处理POST请求返回的302重定向,而Python requests库默认会将POST转为GET请求跟进重定向,这是两者的行为差异。你可以通过以下两种方式解决:
方式一:手动处理重定向
检查响应状态码,获取重定向地址后发起新请求:
var initialResponse = await http.post(Uri.parse("LINK_TO_WEBSITE"), body: {"data": "data"}); if (initialResponse.statusCode == 302) { String? redirectPath = initialResponse.headers['location']; if (redirectPath != null) { // 拼接完整URL(处理相对路径) Uri originalUri = Uri.parse("LINK_TO_WEBSITE"); Uri redirectUri = originalUri.resolve(redirectPath); // 根据目标网站要求选择GET/POST,requests默认用GET var finalResponse = await http.get(redirectUri); print(finalResponse.body); } }
方式二:使用自定义Client配置重定向行为
通过http.Client可以更灵活控制重定向规则,确保自动跟进:
final client = http.Client(); try { final response = await client.post( Uri.parse("LINK_TO_WEBSITE"), body: {"data": "data"}, followRedirects: true, maxRedirects: 5, ); print(response.body); } finally { client.close(); }
注:如果目标网站要求重定向时保持POST方法,你可能需要额外处理请求体的传递,部分网站会在重定向时保留原请求参数。
内容的提问来源于stack exchange,提问作者Circle Dev
相关产品推荐
相关产品推荐

