Есть ли в консольном приложении 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.