1
匹配當使用Cohttp_async
執行以下列方式的請求,我處理302(臨時重定向)的HTTP響應代碼:Cohttp - 在不同的HTTP響應代碼
let rec download uri =
Cohttp_async.Client.get uri
>>= fun (response, body) ->
let http_code = Cohttp.Code.code_of_status (Cohttp.Response.status response) in
if Cohttp.Code.is_redirection http_code then
(* Code to handle the redirect *)
else Cohttp_async.Body.to_string body
這似乎好嗎工作(至少在我使用它的簡單情況下)。我主要想知道是否有更好的方法來做到這一點。我認爲可能有更好的方法來處理這個問題,比如通過匹配Cohttp.Code.status
。例如:
match http_code with
| Ok -> Cohttp_async.Body.to_string body
| Temporary_redirect -> (* Code to handle the redirect *)
| _ -> (* Failure here, possibly *)
到目前爲止,我還沒有太多運氣,因爲它似乎我不匹配正確的構造函數。
作爲第二方面的問題,Cohttp是否有更好的方式來處理HTTP重定向作爲響應的一部分?也許我這樣做的方式是錯誤的,並且有一個更簡單的方法。
您應該至少在您的構造函數名稱中添加back-ticks,因爲它們是多態變體 – ivg
我有一些學習要做,因爲我不太確定多態變體是什麼。我認爲你指的是我試圖匹配的模式 - 據我所知,'Ok'和'Temporary_redirect'是cohttp的'Code'模塊中定義的類型:https://github.com/avsm/ocaml- cohttp /斑點/主/ cohttp/code.mli。我想我的問題是否以及如何在此代碼中使用狀態類型。 –
多態變異體可以通過前面的反萃來區別於普通的變體,我不會提供一個例子,因爲我認爲反萃將被SO吃掉。多態變體不應使用模塊名稱限定,以便它們都位於全局名稱空間中。他們有其他功能,但對於這種情況就足夠了。 – ivg