我正在使用http客户端进行flutter网络调用。
方法体:
static Future<http.Response> httpPost(
Map postParam, String serviceURL) async {
Map tempParam = {"id": "username", "pwd": "password"};
var param = json.encode(tempParam);
serviceURL = "http:xxxx/Login/Login";
// temp check
Map<String, String> headers = {
'Content-Type': 'application/json',
'cache-control': 'no-cache',
};
await http.post(serviceURL, headers: headers, body: param).then((response) {
return response;
});
}
此外,相同的代码还会返回对其他请求和 URL 的正确响应。 首先我尝试使用 chopper 客户端,但遇到了同样的问题。
我无法从服务器端检测到该问题。
任何帮助/提示都会有帮助
尝试在
/
的末尾添加斜线 serviceUrl
。因此,serviceUrl 是 serviceURL = "http:xxxx/Login/Login/"
而不是 serviceURL = "http:xxxx/Login/Login"
。
这对我有用。
您需要找到一种方法来遵循重定向。
也许邮递员正在这样做。
阅读此>> https://api.flutter.dev/flutter/dart-io/HttpClientRequest/followRedirects.html
您可以尝试使用
get
代替 post
吗?至少尝试看看发生了什么
在文档中说:
Automatic redirect will only happen for "GET" and "HEAD" requests
only for the status codes
HttpStatus.movedPermanently (301),
HttpStatus.found (302),
HttpStatus.movedTemporarily (302, alias for HttpStatus.found),
HttpStatus.seeOther (303),
HttpStatus.temporaryRedirect (307)
@Abel 上面的答案是正确的,但我不得不从使用中切换:
Uri url = Uri.https(defaultUri, path);
到
Uri url = Uri.parse('https://todo-fastapi-flutter.herokuapp.com/plan/');
在
/
之后得到最后一个plan
。
第一种方法不断丢失它,所以我收到了 307 错误。
flutter.dev 显示了完整的示例:
Future<http.Response> createAlbum(String title) {
return http.post(
Uri.parse('https://jsonplaceholder.typicode.com/albums'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, String>{
'title': title,
}),
);
}
此处:https://flutter.dev/docs/cookbook/networking/send-data#2-sending-data-to-server
将 / 放在 URL 末尾对我有用。
示例: https://api.com/v1/book/list 给我一个临时重定向错误; 尽管, https://api.com/v1/book/list/有效。 (/在最后)
在 URL 中保留 https 而不是 http,这对我很有帮助。
对于 Dio Http 客户端,使用 Dio Option follow redirect as True
getDioOption(){
return BaseOptions(connectTimeout: 30, receiveTimeout: 30,
followRedirects: true);
}
我确实遇到了这个问题,@Abel Rodríguez 解决方案有效。我不知道为什么会发生这种情况。如果有人有更多的见解并且可以解释一下吗?