CURL问题扑朔迷离

时间:2020-07-05 10:23:58

标签: flutter

我一直在尝试将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依赖项,但这也不起作用。

1 个答案:

答案 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(',')