본문 바로가기
플러터(flutter)

플러터 기초 - HttpOverrides으로 userAgent 설정하기

by 기계공학 주인장 2023. 5. 13.
반응형

일반적으로 사용하던 브라우저에서 User-Agent를 정의하는 방법은 더 이상 사용할 수 없게 되었습니다.

 

그렇기 때문에 다음과 같은 방법으로는 더이상 User-Agent를 변경할 수 없습니다.

 

Image.network(
  'https://example.com/image.jpg',
  headers: {
    'User-Agent': 'Your User Agent',
  },
  ...
);

 

그렇기 때문에 브라우저가 아닌 앱 자체에서 User-Agent를 변경해서 통신을 해야하는데

 

HttpOverrides를 사용하면 그것을 할 수 있습니다.


HttpOverrides를 사용하여 User-Agent 변경하기

다음과 같은 클래스를 정의합니다.

import 'dart:io';

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..userAgent =
          'user-userAgent';
  }
}

 

주의할 점은 반드시 'dart:io';를 import 해줘야 한다는 것입니다.

 

 참고로 ..userAgent에서 ..의 의미는 코틀리의 apply 확장 함수와 같은 역할을 합니다.

 

즉, 위 코드를 코틀린으로 써보면 다음과 같이 쓸 수 있습니다.

 

return super.createHttpClient(context).apply{
    userAgent =
      'your-userAent'
}

 

그리고 main() 함수에 다음과 같이 정의해주면됩니다.

 

void main() {
  HttpOverrides.global = MyHttpOverrides();
  runApp(const MyApp());
}

 

이렇게 하면 http로 하는 모든 통신에 해당 User-Agent를 사용하여 통신할 수 있게 할 수 있습니다.

 

하지만, 모든 http 통신이 아니라 일부의 통신만 실현하고 싶을 때는 어떻게 하면될까요?

 

바로 HttpOverrides.current를 사용하면됩니다.

 

HttpOverrides.current는 해당 코드가 있는 부분만 적용되도록 하는 코드입니다.

 

예를 들면 다음과 같습니다.

 

HttpOverrides.runWithHttpOverrides(() {
  HttpOverrides.current = MyHttpOverrides();
  // 코드 블록 내에서 커스텀 HTTP 동작을 적용
  // ...
}, MyHttpOverrides());

 

이와 같은 방법으로 User-Agent를 설정할 수 있습니다.


 

 

플러터 기초 - PageRouteBuilder를 사용해서 화면 전환하기

플러터에서 화면을 이동하는 방법은 여러 가지가 있습니다. 그중에서 PageRouteBuilder를 사용한 방법을 알아보겠습니다. 그리고 MaterialPageRoute를 사용한 방법도 존재하는데 둘의 차이점도 무엇인지

android-developer.tistory.com

 

반응형


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


댓글