首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改Dio请求中的内容类型

更改Dio请求中的内容类型
EN

Stack Overflow用户
提问于 2022-04-04 15:53:01
回答 1查看 2.4K关注 0票数 1

请告诉我如何用Dio更改我的请求的内容类型?我试图通过将contentType: Headers.formUrlEncodedContentType添加到选项中来更改它,但它似乎没有效果。

我的代码是:

代码语言:javascript
复制
  final String urlString4 = protocol + baseUrl + '/connect/token';

  var loginBody4 = FormData.fromMap({
    'code': code,
    'grant_type': 'authorization_code',
    'redirect_uri': 'courier-mobile-app://auth/login',
    'code_verifier': 'application_application_application_application_application',
    'client_id': 'courier_mobile_app',
    'client_secret': 'secret'
  });

  try {
    response = await dio.post(urlString4,
        data: loginBody4,
        options: Options(
          contentType: Headers.formUrlEncodedContentType
        )
    );
  } on DioError catch (e) {
    print('Request failed with status: ${e.response?.data}');
  }

但我截获的请求如下:

代码语言:javascript
复制
curl -H "user-agent: Dart/2.16 (dart:io)"
-H "content-type: multipart/form-data; boundary=--dio-boundary-3038081899"
-H "cookie: .AspNetCore.Antiforgery.2P6h…..h3g"
-H "host: auth.dev-drive.XXX.dev
--data-binary "----dio-boundary-3038081899
content-disposition: form-data; name=\"code\"

C8C3E5D1ACE01DF61F988E06C391AAB3347BD2A64A0B6F56E5DC225710BEF672
----dio-boundary-3038081899
content-disposition: form-data; name=\"grant_type\"

authorization_code
----dio-boundary-3038081899
content-disposition: form-data; name=\"redirect_uri\"

courier-mobile-app://auth/login
----dio-boundary-3038081899
content-disposition: form-data; name=\"code_verifier\"

application_application_application_application_application
----dio-boundary-3038081899
content-disposition: form-data; name=\"client_id\"

courier_mobile_app
----dio-boundary-3038081899
content-disposition: form-data; name=\"client_secret\"

secret
----dio-boundary-3038081899--
" --compressed "https://auth.dev-drive.XXX.dev/connect/token"

我试过这样做

代码语言:javascript
复制
dio.options.headers['content-Type'] = 'application/x-www-form-urlencoded';
response = await dio.post(urlString4, data: loginBody4);

但结果是一样的:

代码语言:javascript
复制
content-type: multipart/form-data; boundary=--dio-boundary-3428087265
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-04 16:24:42

多亏了Anis的建议,它起了作用!事实上,问题就在FormData

代码语言:javascript
复制
  Map<String, String> loginBody4 = {
    'code': code,
    'grant_type': 'authorization_code',
    'redirect_uri': 'courier-mobile-app://auth/login',
    'code_verifier': 'application_application_application_application_application',
    'client_id': 'courier_mobile_app',
    'client_secret': 'secret'
  };

  response = await dio.post(urlString4, data: loginBody4, options: Options(contentType: Headers.formUrlEncodedContentType));

这也适用于:

代码语言:javascript
复制
  dio.options.headers['content-Type'] = 'application/x-www-form-urlencoded';
  response = await dio.post(urlString4, data: loginBody4);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71740182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档