Есть ли в консольном приложении Dart библиотека для HTTP-запроса, которая не требует доступа к DOM?

Я начал с попытки использовать HTTPRequest в dart:html но быстро понял, что это невозможно в консольном приложении. Я провел поиск в Google, но не могу найти то, что мне нужно (только поиск HTTP-сервера), есть ли способ отправки обычного HTTP-запроса через консольное приложение?

Или мне придется использовать метод использования сокетов и реализовать свой собственный HTTP-запрос?

3 ответа

Решение

В библиотеке IO есть класс HttpClient для выполнения HTTP-запросов:

import 'dart:io';

void main() {
  HttpClient client = new HttpClient();
  client.getUrl(Uri.parse("http://www.dartlang.org/"))
    .then((HttpClientRequest request) {
        return request.close();
      })
    .then(HttpBodyHandler.processResponse)
    .then((HttpClientResponseBody body) {
        print(body.body);
      });
}

Обновление: так как HttpClient довольно низкоуровневый и немного неуклюжий для чего-то простого, как эта, основная команда Dart также сделала pub пакет, http, что упрощает вещи:

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

void main() {
  http.get('http://pub.dartlang.org/').then((response) {
    print(response.body);
  });
}

Я обнаружил, что crypto пакет был зависимым, поэтому мой pubspec.yaml выглядит так:

name: app-name
dependencies:
  http: any
  crypto: any

Вы будете искать HttpClient, который является частью серверной части dart:io Библиотека SDK.

Пример взят из документа API, связанного с выше:

HttpClient client = new HttpClient();
client.getUrl(Uri.parse("http://www.example.com/"))
    .then((HttpClientRequest request) {
      // Prepare the request then call close on it to send it.
      return request.close();
    })
    .then((HttpClientResponse response) {
      // Process the response.
    });

Я бы хотел порекомендовать вам пакет dio, dio - мощный Http-клиент для Dart/Flutter, который поддерживает перехватчики, FormData, отмену запросов, загрузку файлов, тайм-аут и т. Д.

DIO очень прост в использовании:

Выполнение запроса Get:

response=await dio.get(url)

Выполнение запроса POST:

response=await dio.post(url,data:{"id":12,"name":"wendu"})

Отправка FormData:

FormData formData = new FormData.from({
   "name": "wendux",
   "file1": new UploadFileInfo(new File("./upload.pdf"), "upload1.pdf")
});
response = await dio.post("/info", data: formData)

Скачивание файла:

response=await dio.download("https://www.google.com/","./xx.html") 

Более подробную информацию можно найти на Github: https://github.com/flutterchina/dio.

Другие вопросы по тегам