2016-03-17 13 views
6

Próbuję zrobić coś, co powinno być proste: wysłać żądanie GET do adresu URL. Jednakże, gdy szukam przykładów tego, często kończę z takim bełkotem, jak this.Jak utworzyć proste żądanie GET w OCaml?

Czy ktoś wie, jak wykonać proste żądanie HTTP przy użyciu OCaml? Jestem nowicjuszem OCaml z jakimś expem Haskella.

UWAGA:

Roztwór stosując możliwie najniższy poziom SML byłby idealny. Widziałem już bibliotekę Cohttp, ale bardziej interesuję się rodzimą (?) HTTP biblioteką OCaml lub czymś podobnym.

W odpowiedzi na @antron, bardzo docenione byłoby rozwiązanie wykorzystujące najniższy możliwy poziom OCaml. Jestem przekonany, że będzie to dotyczyło biblioteki Unix. Ale jeśli istnieje inne rozwiązanie, które nie angażuje bibliotek zewnętrznych, byłoby to mile widziane.

+0

Zgodnie z komentarzem do mojej odpowiedzi zalecającym Cohttp, nie ma takiej biblioteki w OCaml. Standardowa biblioteka OCaml jest bardzo surowa i powszechne jest używanie bibliotek społeczności do wielu zadań. Jeśli chcesz zobaczyć listę bibliotek zapakowanych z OCaml, to tutaj: http://caml.inria.fr/pub/docs/manual-ocaml/libref/index.html – antron

+0

Jeśli chcesz "najniższy możliwy poziom" w OCaml, odpowiedzią będą gniazda (np. standardowy moduł 'Unix'), a następnie nie będzie już * prosty *. Jeśli chcesz niski poziom, wyjaśnij swoje pytanie. – antron

+1

To drażni moje myśli, że ktokolwiek mógłby zgodzić się na takie pytanie, jego chleb i masło kodowane dla większości programistów, jak pokazuje ankieta dewelopera przepełnienia stosu. @dopatraman Polecam również zapoznanie się z http://hyegar.com/2015/10/20/so-youre-learning-ocaml/, aby szybko uzyskać produktywność. –

Odpowiedz

5

Skorzystaj z biblioteki Cohttp. Zobacz Client example.

Odpowiednia linia:

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

To daje parę (response, body) wewnątrz Lwt monady. response jest po prostu rekordem, a body jest strumieniem. Reszta przykładu to drukowanie interesujących fragmentów.

+0

Czy wiesz, jak to zrobić z kodem niższego poziomu? Czy istnieje podstawowa biblioteka 'Http' dla OCaml? Próbuję uczyć się tego języka od podstaw. – dopatraman

+3

Cohttp jest jednym z kandydatów do podstawowej biblioteki HTTP w OCaml (innym jest Ocamlnet, podobnie jak w zamieszczonym przez ciebie linku). Jeśli chcesz pójść jeszcze niżej, będziesz musiał użyć gniazd bezpośrednio z modułu 'Unix' (lub' Lwt_unix', jeśli chcesz użyć monadę współbieżną - innym wyborem monady współbieżności jest biblioteka Async). Nie ma standardowej biblioteki HTTP pobłogosławionej przez samą OCaml, ale myślę, że społeczność obecnie w mniejszym lub większym stopniu decyduje się na Cohttp. – antron

0

Do programowania na poziomie UNIX w OCaml (nawet jeśli niewiele o nim wiesz), polecam znakomitą książkę Unix System Programming in OCaml. Pokaże Ci, jak napisać klienta, który chcesz.