Diversión con Curl y Dart

Original web-page: http://sellsbrothers.com/fun-with-curl-and-dart

Chris Sells

Si eres un programador Dart, el comando curl en realidad no le ayude. Ah, puede burlarte de su maravillosa funcionalidad, pero aún tienes que tomar todo lo que puedas hacer con curl y traducirlo manualmente en código Dart.

Hasta ahora.

Actualización de curl.trillworks.com para Dart

Por casi 5 años, Nick Carneiro ha mantenido un sitio maravilloso para la conversión de los comandos de enrollamiento en el código de red para el idioma deseado: curl.trillworks.com.

Supongo que su primer idioma más favorecido debe ser Python, ya que ese es el predeterminado, pero desde la semana pasada, ha aparecido un nuevo idioma: Dart. Además de proporcionar este sitio, Nick hizo otra cosa: expuso la tecnología subyacente como un repositorio de OSS en GitHub: curlconverter. Y ese repositorio es una maravilla para la vista, porque fue factorizado de tal manera que podría agregar soporte de generación Dart para Dart en un fin de semana. Realmente un ejemplo para otras herramientas multilingües a seguir.

Chrome DevTools: red

La razón por la que te importa convertir curl en Dart es porque las DevTools de Chrome convierten el formato del comando curl en un formato de captura universal para solicitudes en Chrome. Eso significa que usted puede ir a su sitio web favorito, cavar alrededor en la ficha Red del cromo DevTools, haga clic en la parte que te gusta y tire de ella como un comando curl.

Cuando lo hagas, terminarás con algo como esto:

curl "https://www.fantasynamegen.com/barbarian/short/" -H "Upgrade-Insecure-Requests: 1" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36" -H "Referer: https://www.fantasynamegen.com/" --compressed

Incluso si nunca ejecuta esto como un comando curl, aún puede usarlo para generar código para el idioma que elija.

Dart código de red

Pegar el rizo de Chrome DevTools en el sitio web convertidor de rizo de Nick le da dardo código que es similar al siguiente:

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

void main() async {
  var headers = {
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
    'Referer': 'https://www.fantasynamegen.com/',
    'accept-encoding': 'gzip',
  };

  var res = await http.get('https://www.fantasynamegen.com/barbarian/short/', headers: headers);
  if (res.statusCode != 200) throw Exception('get error: statusCode= ${res.statusCode}');
  print(res.body);
}

Este es en realidad un programa completo y si lo coloca en un archivo, p. fanname.dart, ya casi estás listo para ejecutarlo. También necesita un pubspec.yaml mínimo que se vea así:

# pubspec.yaml
name: fanname
dependencies:
  http:

El archivo pubspec enumera el nombre de su aplicación y sus dependencias, específicamente el paquete http. Estos dos archivos juntos son suficientes para ejecutar el programa y obtener el mismo resultado que el comando curl:

$ pub get
$ dart fanname.dart

La llamada a la  pub get tira hacia abajo de las dependencias y la llamada a dardo se ejecuta el programa. Por supuesto, esto supone que usted tiene el Dart SDK instalado y en el PATH. Suponiendo que usted lo hace, usted tiene salida que es similar al siguiente:

En realidad, la salida en este caso continúa durante mucho más tiempo que eso, por lo que no es particularmente útil, pero con un poco de filtrado, puede ser:

$ dart fanname.dart | grep '<li>' | sed 's/<\/*li>//g'
Vadryt
Hildecon
Axra
Rordryt
Freyagar
Egelkele
Mand
Sigceo
Krokrolm
Ric
Vase
Hildekrucen
Rabeorth
Thakald
Morncrom
Lafthe
Garrak
Caror'n
Theodtarg
Ordhall

¿Dónde estamos?

Si el código de red que desea ya se está ejecutando a través de curl o en la web, eso significa que puede tomar ese comando curl y convertirlo en código Dart con cero esfuerzo en curl.trillworks.com. El código de ese sitio puede ejecutarse inmediatamente como un comando curl o usarse como el inicio de su propio código.

El ejemplo que estaba mostrando en esta publicación generó HTML, pero si en cambio el resultado fue JSON, entonces puede tomar esa salida JSON y pegarla en quicktype.io para obtener también el código de serialización/deserialización JSON para Dart. ¡Es un buen momento para ser programador de Dart!

About the Author