2016-12-01 5 views
1

Ich versuche, das OCaml cohttp-Paket zu verwenden, um eine POST-Anforderung mithilfe der Client.post-Methode zu senden. Ich schaute auf das Beispiel in ocaml-cohttp/lib_test/test_net_lwt_client_and_server.ml, um die Methode zu verwenden, hier ist ein Codeausschnitt aus dem Beispiel, das die Funktion verwendet.Verwenden von OCaml cohttp Client.post-Methode

Client.post ~body:(Cohttp_lwt_body.of_string "barfoo") url

Ich verwende die Funktion genau die gleiche Art und Weise in meinem eigenen Code:

Client.post ~body:(Cohttp_lwt_body.of_string bodyString) (Uri.of_string stringURI) >>= function 
          | Some (_, body) -> Cohttp_lwt_body.string_of_body body 
          | None -> return "" 

Aber ich bekomme die Fehlermeldung:

Error: This pattern matches values of type 'a option 
    but a pattern was expected which matches values of type 
    Cohttp.Response.t * Cohttp_lwt_body.t 

ich https://github.com/mirage/ocaml-cohttp/issues/64 sah die schlug vor, das ~body Etikett zu ?body zu ändern, aber dann bekam ich einen anderen Fehler:

Error: This expression has type Cohttp_lwt_body.t 
    but an expression was expected of type Cohttp_lwt_body.t option 

Könnte jemand bitte erklären, wie man diese Funktion richtig benutzt?

Antwort

2

Die Fehlermeldung zeigt an, dass dies ein Tipp Problem ist:

Error: This pattern matches values of type 'a option 
    but a pattern was expected which matches values of type 
    Cohttp.Response.t * Cohttp_lwt_body.t 

Ihre function Körper rechts von der bind (>>=) neu geschrieben werden soll, das Tupel von Client.post eher als ein option Typ zurückgegeben zu behandeln. Zum Beispiel:

Client.post 
    ~body:(Cohttp_lwt_body.of_string bodyString) 
    (Uri.of_string stringURI) 
>>= fun (response, body) -> 
match response with 
| { Cohttp.Response.status = `OK; _ } -> ok_response_action body 
| { Cohttp.Response.status; _ } -> other_response_action status body 

cohttp hat leider zur Zeit keine leicht zugängliche Dokumentation. Sie müssten die .mli Dateien direkt von der Quelle referenzieren. Siehe zum Beispiel here für Informationen über die Struktur des Typs Cohttp.Response.t.