从http响应中获取标头

时间:2017-06-05 11:51:45

标签: elm

我是榆树的新手, 我有一个登录api,它在其hedears中返回一个JWT令牌

curl  http://localhost:4000/api/login?email=bob@example&password=1234

响应:

HTTP/1.1 200 OK
authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXyLp0aSI6ImefP2GOWEFYWM47ig2W6nrhw
x-expires: 1499255103
content-type: text/plain; charset=utf-8

success

现在我正在尝试编写一个函数来发送请求并从elm

中的标头返回令牌
authUser =
    Http.send "http://localhost:4000/api/login?email=bob@example&password=1234"

我该如何以简单的方式做到这一点?

2 个答案:

答案 0 :(得分:11)

要从回复中提取标头,您必须使用Http.request以及expectStringResponse功能,其中包括包含标头的完整回复。

expectStringResponse函数的值为Http.Response a,因此我们可以创建一个接受标题名称和响应的函数,然后根据是否返回Ok headerValueErr msg标题被找到:

extractHeader : String -> Http.Response String -> Result String String
extractHeader name resp =
    Dict.get name resp.headers
        |> Result.fromMaybe ("header " ++ name ++ " not found")

这可以由请求构建器使用,如:

getHeader : String -> String -> Http.Request String
getHeader name url =
    Http.request
        { method = "GET"
        , headers = []
        , url = url
        , body = Http.emptyBody
        , expect = Http.expectStringResponse (extractHeader name)
        , timeout = Nothing
        , withCredentials = False
        }

Here is an example on ellie-app.com返回content-type的值作为示例。您可以将"authorization"替换为您的目的。

答案 1 :(得分:3)

我谦虚地建议你看看我的elm-jwt库,以及那里的get函数吗?

Jwt.get token "/api/data" dataDecoder
    |> Jwt.send DataResult

JWT令牌通常需要作为Authorization标头发送,此功能可帮助您创建可传递给Http.sendJwt.send

的请求类型