在 dart 中使用 IBM watson 的休息服务作为 post 方法时出现 401 错误

Getting 401 error while using rest services of IBM watson in dart as post method

这是我第一次在 dartLang 中尝试 post 方法。 我使用了一个简单的休息 api ,你必须 post 一些字符串(文本)并将得到 Json 作为响应。 我也给了正确的用户名和密码,但我最终收到的回复是 {code: 401, error: Unauthorized}.

请问我哪里错了??我从未在 DartLang 中使用过 Rest api 的 post。

这是它的简单文档https://www.ibm.com/watson/developercloud/personality-insights/api/v3/curl.html?curl

import 'package:untitled1/untitled1.dart' as untitled1;
import 'package:http/http.dart' as http;
import 'dart:async';
import 'dart:convert';


void main() async {

 Map hello;
 hello= await getjson();
 print(hello);

}



 Future<Map> getjson() async {
  String data;
 data= """ Insert Random long text """;



  var url = 'https://gateway.watsonplatform.net/personality- 
 insights/api/v3/profile?username=6cfcbb79-1801-4588-a1b3- 
  5c3ec101244f&password=YFM6h0rIFfzf';
     http.Response response= await http.post(url, body: data, headers: 
 {"accept" : "application/json","Content-Type": "text/plain"},);
   return json.decode(response.body);


     }

您提供的 Watson 参考显示了带有 curl -u 的示例。当 -u 没有特定的身份验证方法(例如摘要)时,curl 默认为 Basic 身份验证。所以,添加用户名和密码到url是不一样的。

Dart 的 http 客户端支持基本身份验证,但需要额外往返服务器,因此在每次请求时发送凭据通常更简单。下面的代码让你越过 401 错误。

import 'dart:convert';

import 'package:http/http.dart' as http;

main() async {
  http.Response r = await http.post(
    'https://gateway.watsonplatform.net/personality-insights/api/v3/profile',
    body: 'some random string',
    headers: {
      'Accept': 'application/json',
      'Authorization': basicAuthorizationHeader(
        '6cfcbb79-1801-4588-a1b3-5c3ec101244f',
        'YFM6h0rIFfzf',
      )
    },
  );
  print(r.statusCode);
  print(r.body);
}

String basicAuthorizationHeader(String username, String password) {
  return 'Basic ' + base64Encode(utf8.encode('$username:$password'));
}