Flutter http Package POST API 调用 return 302 而不是 200,post 在 DB 中是成功的
Flutter http Package POST API call return 302 instead of 200, post is success in DB
嗨,当我通过 Postman 发出 API post 请求时,收到正确的状态码 200 但进行相同的 api 调用使用 flutter/http 包 (v0.12.0+4) 或 DIO (v3.0.9) 包,我得到的状态代码为 302,但是 post 成功并且数据保存在数据库中。我怎样才能为此获得状态 200 或者是否有更好的方法来处理 post
中的重定向
发现这些 git 集线器问题,但没有关于如何解决这个问题的答案
https://github.com/dart-lang/http/issues/157
https://github.com/dart-lang/sdk/issues/38413
Code making API post
...........
final encoding = Encoding.getByName('utf-8');
final headers = {
HttpHeaders.contentTypeHeader: 'application/json; charset=UTF-8',
HttpHeaders.acceptHeader: 'application/json',
};
//String jsonBody = jsonEncode(feedRequest.toJsonData());
String jsonBody = feedRequest.toJsonData();
print('response.SubmitFeedApiRequest>:' + feedRequest.toJsonData());
print('jsonBody:>' + jsonBody);
String url ='https://myapp';
final response = await http.post(url,
headers: headers, body: jsonBody, encoding: encoding);
print('response.statusCode:' + response.statusCode.toString());
if (response.statusCode == 200) {
print('response.data:' + response.body);
} else {
print('send failed');
}
...............
邮差截图
===根据@midhun-mp 评论更新了工作代码
final response = await http.post(url,
headers: headers, body: jsonBody, encoding: encoding);
print('response.statusCode:' + response.statusCode.toString());
if (response.statusCode == 302) {
//print('response.headers:' + response.headers.toString());
if (response.headers.containsKey("location")) {
final getResponse = await http.get(response.headers["location"]);
print('getResponse.statusCode:' + getResponse.statusCode.toString());
return SubmitFeedApiResponse(success: getResponse.statusCode == 200);
}
} else {
if (response.statusCode == 200) {
// print('response.data:' + response.body);
return SubmitFeedApiResponse.fromJson(json.decode(response.body));
}
return SubmitFeedApiResponse(success: false);
}
}
302 不是错误,它是重定向状态代码。 http 包不支持 POST 请求的重定向。
所以你必须手动处理重定向。在您的代码中,您还必须为状态代码 302 添加条件。当状态代码为 302 时,在响应 header 中查找重定向 url 并在 url.
上执行 http GET
只需添加额外的 header,
header : "Accept" : "application/json"
嗨,当我通过 Postman 发出 API post 请求时,收到正确的状态码 200 但进行相同的 api 调用使用 flutter/http 包 (v0.12.0+4) 或 DIO (v3.0.9) 包,我得到的状态代码为 302,但是 post 成功并且数据保存在数据库中。我怎样才能为此获得状态 200 或者是否有更好的方法来处理 post
中的重定向发现这些 git 集线器问题,但没有关于如何解决这个问题的答案 https://github.com/dart-lang/http/issues/157
https://github.com/dart-lang/sdk/issues/38413
Code making API post
...........
final encoding = Encoding.getByName('utf-8');
final headers = {
HttpHeaders.contentTypeHeader: 'application/json; charset=UTF-8',
HttpHeaders.acceptHeader: 'application/json',
};
//String jsonBody = jsonEncode(feedRequest.toJsonData());
String jsonBody = feedRequest.toJsonData();
print('response.SubmitFeedApiRequest>:' + feedRequest.toJsonData());
print('jsonBody:>' + jsonBody);
String url ='https://myapp';
final response = await http.post(url,
headers: headers, body: jsonBody, encoding: encoding);
print('response.statusCode:' + response.statusCode.toString());
if (response.statusCode == 200) {
print('response.data:' + response.body);
} else {
print('send failed');
}
...............
邮差截图
===根据@midhun-mp 评论更新了工作代码
final response = await http.post(url,
headers: headers, body: jsonBody, encoding: encoding);
print('response.statusCode:' + response.statusCode.toString());
if (response.statusCode == 302) {
//print('response.headers:' + response.headers.toString());
if (response.headers.containsKey("location")) {
final getResponse = await http.get(response.headers["location"]);
print('getResponse.statusCode:' + getResponse.statusCode.toString());
return SubmitFeedApiResponse(success: getResponse.statusCode == 200);
}
} else {
if (response.statusCode == 200) {
// print('response.data:' + response.body);
return SubmitFeedApiResponse.fromJson(json.decode(response.body));
}
return SubmitFeedApiResponse(success: false);
}
}
302 不是错误,它是重定向状态代码。 http 包不支持 POST 请求的重定向。
所以你必须手动处理重定向。在您的代码中,您还必须为状态代码 302 添加条件。当状态代码为 302 时,在响应 header 中查找重定向 url 并在 url.
上执行 http GET只需添加额外的 header,
header : "Accept" : "application/json"