我对Haskell很新,我不确定如何实现这一目标。我使用wreq作为HTTP客户端,我想检查哪些HTTP标头被发送到服务器。例如,我定义了以下方法,尝试使用Facebook凭据进行身份验证:
authenticate ⦂ String → String → IO (Response ByteString)
authenticate facebookId facebookToken =
postWith opts "https://api.somedomain.com/auth" (object $ ["facebook_token" .= facebookToken, "facebook_id" .= facebookId])
where opts = defaults & header "Content-Type" .~ ["application/json"]
& header "Accept" .~ ["application/json"]
& proxy ?~ httpProxy "localhost" 9396
使用POSTman我得到了正确的答案但是wreq
我被禁止访问(403)。我假设库中可能会添加一些额外的请求标头,这就是我想要检查的内容。
任何提示?
编辑:http代理现在用于检查HTTP流量(但是未检测到wreq
个请求)。
答案 0 :(得分:3)
在Wreq中,Options
类型是Show
的一个实例,因此您可以将其传递给print
,或者只是在ghci上检查它:
ghci> import Network.Wreq
ghci> defaults :: Options
Options { manager = Left _, proxy = Nothing, auth = Nothing, headers =
[("User-Agent","haskell wreq-0.3.0.1")], params = [], redirects = 10, cookies = [] }
您还可以使用headers
镜头直接关注标题:
ghci> defaults ^. headers
[("User-Agent","haskell wreq-0.3.0.1")]
但是如果Wreq在将选项传递给postWith
后添加一些标题,则必须使用像Fiddler这样的Web调试代理来了解正在发生的事情。