当Cohttp_async
用于执行请求时,我正在以下列方式处理 302(临时重定向)的 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
这似乎工作正常(至少在我使用它的简单情况下)。我主要想看看是否有更好的方法来做到这一点。我认为可能有更好的方法来处理这个问题,比如匹配 on 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 重定向作为响应的一部分返回?也许我要解决这个问题的方式是错误的,并且有一个更简单的方法。