2016-03-17 15 views
6

Sto provando a fare qualcosa che dovrebbe essere semplice: fai una richiesta GET a un URL. Tuttavia, quando cerco esempi su come farlo, spesso finisco con un linguaggio quasi senza parole come this.Come faccio una semplice richiesta GET in OCaml?

Qualcuno sa come effettuare una semplice richiesta HTTP utilizzando OCaml? Sono un novellino OCaml con qualche exp Haskell.

NOTA:

Una soluzione con il più basso livello possibile OCaml sarebbe l'ideale. Ho visto la libreria Cohttp utilizzata, ma sono più interessato a una copia nativa (?) HTTP di OCaml o qualcosa del genere.

In risposta a @antron, una soluzione che utilizza il livello nativo OCaml di livello più basso sarebbe molto apprezzata. Sono portato a credere che ciò comporterà la libreria Unix. Ma se c'è un'altra soluzione che non coinvolge le librerie di terze parti, sarebbe altrettanto gradita.

+0

Come da commento sulla mia risposta che consiglia Cohttp, non esiste una libreria di questo tipo in OCaml. La libreria standard di OCaml è molto austera, ed è comune usare le librerie di comunità per molte attività. Se vuoi vedere l'elenco delle librerie con OCaml, è qui: http://caml.inria.fr/pub/docs/manual-ocaml/libref/index.html – antron

+0

Se vuoi il "livello più basso possibile" in OCaml, la risposta sarà socket, (es. modulo standard 'Unix') e quindi non sarà più * semplice *. Se vuoi un livello così basso, ti preghiamo di chiarire la tua domanda. – antron

+1

Mi viene in mente che qualcuno avrebbe fatto un downvot su una domanda come questa, la sua codifica di pane e burro per la maggior parte degli sviluppatori come mostra il sondaggio tra gli sviluppatori dello stack overflow. @dopatraman Raccomando anche di dare un'occhiata a http://hyegar.com/2015/10/20/so-youre-learning-ocaml/ per essere produttivi rapidamente. –

risposta

5

Utilizzare la libreria Cohttp. Vedi lo Client example.

La linea di riferimento è:

Cohttp_lwt_unix.Client.get (Uri.of_string "http://www.reddit.com/") 

Questo vi dà un paio di (response, body) all'interno del Lwt monade. response è fondamentalmente un record e body è uno stream. Il resto dell'esempio sta semplicemente stampando alcuni pezzi interessanti di quelli.

+0

Sai come farlo con il codice di livello inferiore? Esiste una libreria 'Http' di base per OCaml? Sto cercando di imparare questo linguaggio da zero. – dopatraman

+3

Cohttp è un candidato per una libreria HTTP di base in OCaml (un altro è Ocamlnet, come nel link che hai postato). Se vuoi andare anche di livello inferiore, dovresti usare i socket direttamente dal modulo 'Unix' (o' Lwt_unix', se vuoi usare un monade di concorrenza - un'altra scelta di monade di concorrenza è la libreria Async). Non esiste una libreria HTTP standard benedetta da OCaml, ma penso che la comunità abbia attualmente più o meno deciso su Cohttp. – antron

0

Per la programmazione Unix di basso livello in OCaml (anche se non ne sai molto), consiglio l'eccellente libro Unix System Programming in OCaml. Ti dirà come scrivere il cliente che vuoi.

Problemi correlati