인프런 커뮤니티 질문&답변

바코드님의 프로필 이미지
바코드

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

dio 패키지는 redirect 처리를 하기 어렵나요?

작성

·

764

0

Node.js express 로 라우터를 설정해 다음과 같은 코드로 http 통신을 했습니다

/api/test1 주소의 post 라우터에서 /api/test2 주소의 post 라우터로 redirect 되는 통신을 테스트 해보았습니다

                onPressed: () async {
                  var res = await http.post(Uri.parse("$uri/api/test1"),
                      headers: <String, String>{
                        'Content-Type': 'application/json; charset=UTF-8',
                      },
                      body: jsonEncode(
                        {
                          "key1": "1000",
                        },
                      ));
                  if (res.statusCode == 307) {
                    var newURL = res.headers["location"];
                    print(res.body);
                    res = await http.post(Uri.parse("$uri$newURL"),
                        headers: <String, String>{
                          'Content-Type': 'application/json; charset=UTF-8',
                        },
                        body: jsonEncode(
                          {
                            "key1": "1000",
                          },
                        ));
                    print(res.body);
                  } else {
                    var data = res.body;
                    print(data);
                  }
                },

테스트 결과 제가 데이터를 올바르게 전송할 수 있었습니다 그리고 이번에 선생님의 강의를 듣고 dio라는 패키지를 알게되어서 dio 패키지를 통해서 똑같은 통신 테스트를 해 보았습니다

                onPressed: () async {
                  final dio = Dio(BaseOptions(
                    contentType: "application/json",
                    followRedirects: false,
                    maxRedirects: 5,
                  ));

                  final url = "$uri/api/test1";
                  final body = {'key1': '1000'};
                  final headers = {'Content-Type': 'application/json'};

                  try {
                    Response res = await dio.post(
                      url,
                      data: body,
                    );
                    if (res.statusCode == 307) {
                      final redirectUrl = res.headers.value("location");
                      final redirectRes = await dio.post(
                        redirectUrl!,
                        data: body,
                        options: Options(
                          headers: headers,
                          method: "POST",
                        ),
                      );
                      print(redirectRes.data);
                    } else {
                      final data = res.data;
                      print(data);
                    }
                  } catch (e) {
                    print("error 발생 $e");
                  }
                },

followRedirects 을 true 로 해도 307 코드를 해결하지는 못하는것 같습니다

flutter: error 발생 DioError [DioErrorType.response]: Http status error [307]

어떻게 dio 패키지로 redirect 를 처리 할 수 있을까요?

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

아무래도 catch문에서 처리하셔야 할 것 같습니다.

Dio에서 307의경우 에러로 인식하는 것 같네요.

감사합니다!

바코드님의 프로필 이미지
바코드

작성한 질문수

질문하기