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