这是我在dartLang中尝试发布方法的第一时间。 香港专业教育学院使用一个简单的rest api,您必须在其中发布一些字符串(文本),并将得到Json作为响应。 我还提供了正确的用户名和密码,但我最终收到的响应是{code:401,error:Unauthorized}。
我可以知道我错在哪里吗?我从未在DartLang中处理过Rest api的文章。
以下是其简单的文档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);
}
答案 0 :(得分:0)
您提供的Watson参考显示了一个curl -u
的示例。如果提供的curl
没有特定的身份验证方法(例如摘要),则Basic
默认为-u
身份验证。因此,将用户名和密码添加到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'));
}