見出し画像

[Dart]HTTPサーバーにHTTPリクエストを送る

Android, iOSなどを開発できるクロスプラットフォームであるFlutterでは、プログラミング言語であるDartが使われています。
このDartでは色んなことができますが、今回はDartで実装したHTTPサーバーにリクエスト、レスポンスを送る方法についてご紹介します♪

HTTPサーバーの立て方などは以下記事を参考

まずはDartプロジェクトを作成します。
任意のディレクトリで、以下を実行してDartプロジェクトを起動します。

% dart create <myapp> //<>は任意のプロジェクト名にする。今回はmyappという名前にする
% cd myapp // myappに移動
% dart run // dartプロジェクトを起動
Building package executable... 
Built myapp:myapp.
Hello world: 42!

作成したDartプロジェクトにある/bin/myapp.dartが起動し、Hello world: 42!とターミナルに表示されたらOKです。

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

void main(List<String> arguments) {
  print('Hello world: ${myapp.calculate()}!');
}

Dartプロジェクトのはじめ方については、公式ドキュメントを参照。

今回はDartの標準ライブラリである 'dart:io' を使用します。
myapp.dartの既存のコードを消して、dart:ioをインポート

// myapp.dart
import 'dart:io';

そして以下のサンプルコードを記載します。

// myapp.dart
import 'dart:io';

Future main() async {
  final server = await HttpServer.bind('localhost', 8080);
  print('Server started on port: ${server.port}');

  await for (HttpRequest request in server) {
    handleRequest(request);
  }
}

void handleRequest(HttpRequest request) {
  print('Received request: ${request.method} ${request.uri.path}');
  
  request.response
    ..headers.contentType = ContentType('text', 'plain', charset: 'utf-8')
    ..write('Hello, World!')
    ..close();
}

このコードでは、localhostのポート8080でHTTPサーバーが起動します。HTTPサーバーのアドレスは、http://localhost:8080になります。

localhost:
この部分は、ホスト名またはIPアドレスを示しています。localhost は、通常自分のコンピューターを指す特別な名前です。IPアドレスとしては 127.0.0.1 と同義です。
:8080:
この部分は、ポート番号を示しています。HTTPサーバーがリクエストを受け付けるために使用するポートです。今回の例では、ポート番号 8080 を使用しています。

そして、サーバーにリクエストが届くたびに、handleRequest関数が呼び出出されます。この関数は、リクエストを受け取り、テキスト形式のレスポンスを生成してクライアントに返します。

それでは試してみましょう。
dart runすると、port8080でサーバーが立ち上がりました。

% dart run 
Built myapp:myapp.
Server started on port: 8080

ターミナルをもう一つ起動し、curlコマンドを実行します。
curl http://localhost:8080
このコマンドは、http://localhost:8080 に対してHTTP GETリクエストを送信し、レスポンスを受け取ってコンソールに表示してくれます。

Hello, World!と表示され、サーバーがリクエストを受け取り、レスポンスを返した事がわかりました。

% curl http://localhost:8080
Hello, World!


この記事が気に入ったらサポートをしてみませんか?