我一直在尝试将PVOutputs API CURL命令放入我的开发中,但他们似乎做不到。
CURL命令为:curl -H "X-Pvoutput-Apikey: Your-API-Key" -H "X-Pvoutput-SystemId: Your-System-Id" https://pvoutput.org/service/r2/getoutput.jsp
这是我如何使用http请求尝试的方法:
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() {
runApp(new MaterialApp(home: new MyApp()));
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'SolarGridx',
theme: ThemeData(primaryColor: Colors.white),
home: CurlScreen(),
);
}
}
var responseJson;
class CurlScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(body: Center(child: Text(responseJson)));
}
}
Future<void> EnergyInfo() async {
String url = 'https://pvoutput.org/service/r2/getoutput.jsp';
Map<String, String> headers = {
"Content-Type": "application/json",
"X-Pvoutput-Apikey": "064154d4ee89b29f195179ff5fbd30c908fddf45",
"X-Pvoutput-SystemId": "77117",
};
var response = await http.post(url, headers: headers);
int statusCode = response.statusCode;
print('This is the statuscode: $statusCode');
final responseJson = json.decode(response.body);
print(responseJson);
print('This is the API response: $responseJson');
}
我也尝试过使用CURL依赖项,但这也不起作用。
答案 0 :(得分:0)
您的颤动代码seem似乎没有问题。如果可能的话,通过控制台中显示的输出/错误来丰富您的问题。
在我看来,卷曲请求curl -H "X-Pvoutput-Apikey: Your-API-Key" -H "X-Pvoutput-SystemId: Your-System-Id"
具有一个GET
http方法,而在颤动代码中您执行了一个POST
。
因此,要解决此问题,您必须将await http.post(url, headers: headers);
更改为await http.get(url, headers: headers);
。
另外请注意,由于stackoverflow是公共站点,因此您不应在此处发布api密钥。
使用您的api密钥,我能够从api检索响应,看来它不返回json响应。它返回以逗号分隔的纯文本响应。
因此,此代码可能会引发异常。
final responseJson = json.decode(response.body);
您可以尝试仅打印response.body
来查看响应的格式。
如果它是逗号分隔的字符串,则可以执行以下操作来split
响应并获取相关部分
List<String> results = response.body.split(',')