我想你想做的其实是
getHtml
递归,这样当HTTP请求返回201或300级响应代码时,您可以按照
Location
标题指向重定向页面并返回正确的HTML。你可以用一个简单的模式匹配
response.StatusCode
以及位置标题,如下所示:
open FSharp.Data
// stub
let getFullUri (url: string) =
sprintf "%A" <| System.UriBuilder(url)
// stub
let httpRequest = Http.Request
// fetches the requested URL, following redirects as necessary
let rec getHtml location =
let response = httpRequest (getFullUri location)
match response.StatusCode, response.Headers |> Map.tryFind "Location" with
| (status, Some redirectUrl) when status = 201 || (status >= 300 && status < 400) ->
getHtml redirectUrl
| _ ->
response
这就是你想要的吗?我用以下返回302的url测试了它,得到了它被重定向到的页面的html:
https://jigsaw.w3.org/HTTP/300/302.html