Dart で raw ソケットを使用する


Dart で dio lib を使用して http リクエストを送信する方法を示した では、生の Socket オブジェクトを使用して http GET リクエストを送信する例を示します.

import 'dart:convert';
import 'dart:io';

void main() async {
  var socket = await Socket.connect("httpbin.org", 80);
  socket.writeln("GET /get HTTP/1.1");
  socket.writeln("Host:httpbin.org");
  socket.writeln("Connection:close");
  socket.writeln();
  // send request
  await socket.flush();
  // now get response content and decode it with utf-8
  String resp = await utf8.decoder.bind(socket).join();
  await socket.close();
  print(resp);
}


それを実行します:

$ dart main.dart
HTTP/1.1 200 OK
Date: Sat, 18 Dec 2021 04:12:20 GMT
Content-Type: application/json
Content-Length: 197
Connection: close
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

{
  "args": {},
  "headers": {
    "Host": "httpbin.org",
    "X-Amzn-Trace-Id": "Root=1-61bd5fa4-17f8006279006770433cc1ec"
  },
  "origin": "67.83.127.85",
  "url": "http://httpbin.org/get"
}