Я пытаюсь отправить POST
запрос к API для создания учетной записи.
Запрос работает нормально, он должен выглядеть так:
Режим массового редактирования:
Режим редактирования ключевого значения:
Также есть 9 заголовков, которые генерируются автоматически, поэтому Я не показывал их, но могу взять другой экран, если нужно.
Мой запрос выглядит так:
import 'dart:convert' as convert ;
import 'package:my_project/requests/utils.dart';
import 'package:http/http.dart' as http;
Future<String> createUser(String firstName, String name, String mail,
String password, String confirmPassword, String birthDate,
String phone) async {
String url = BASE_URL + "createUser" ; // Don't worry about BASE_URL, the final url is correct
Map<String, dynamic> formMap = {
"name": name,
"surname": firstName,
"mail": mail,
"password": password,
"birth": birthDate,
"phone": phone,
"confirmPassword": confirmPassword
} ;
http.Response response = await http.post(
url,
body: convert.jsonEncode(formMap),
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
encoding: convert.Encoding.getByName("utf-8"),
);
print("RESPONSE ${response.statusCode} ; BODY = ${response.body}");
return (response.body) ;
}
Вот мой результат печати:
I/flutter ( 6942): RESPONSE 307 ; BODY =
Как видите, я получаю ошибку 307, и проблема исходит не от сервера, поскольку он работал с Postman.
Правильно ли я отправляю этот form-urlencoded POST
запрос?
Я тоже пробовал:
http.Response response = await http.post(
url,
body: "name=$name&surname=$firstName&mail=$mail&password=$password&birth=$birthDate&phone=$phone&confirmPassword=$confirmPassword",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
encoding: convert.Encoding.getByName("utf-8"),
);
, но с теми же результатами. Я тоже пробовал:
http.Response response = await http.post(
url,
body: formMap,
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
encoding: convert.Encoding.getByName("utf-8"),
);
снова с тем же результатом.
Что я делаю не так?
РЕДАКТИРОВАТЬ:
Я попробовал ответить FoggyDay, вот мой запрос сейчас:
final client = HttpClient() ;
final request = await client.postUrl(Uri.parse(url));
request.headers.set(HttpHeaders.contentTypeHeader, "application/x-www_form-urlencoded");
request.followRedirects = true ;
request.write(formMap);
final response = await request.close();
print("STATUS CODE = ${response.statusCode}");
Однако у меня все еще есть ошибка 307. Правильный ли я запрос создал?
РЕДАКТИРОВАТЬ 2:
Как и просили, я напечатал местоположение следующим образом:
final client = HttpClient() ;
final request = await client.postUrl(Uri.parse(url));
request.headers.set(HttpHeaders.contentTypeHeader, "application/x-www_form-urlencoded");
request.followRedirects = true ;
request.write(formMap);
final response = await request.close();
print("STATUS CODE = ${response.statusCode}");
print("Response headers = ${response.headers}");
И я получаю:
I/flutter ( 7671): STATUS CODE = 307
I/flutter ( 7671): Response headers = location: /app/createUser/
I/flutter ( 7671): date: Tue, 26 May 2020 09:00:29 GMT
I/flutter ( 7671): content-length: 0
I/flutter ( 7671): server: Apache/2.4.41 (Amazon) OpenSSL/1.0.2k-fips
Дело в том, что я уже звоню в / app / createUser ... ('/ app /' находится в BASE_URL)