jarandaf
jarandaf

Reputation: 4427

Check wreq request headers

I am pretty new to Haskell and I am not sure how I can achieve this. I am using wreq as HTTP client and I would like to check what HTTP headers are being sent to the server. For instance, I have defined the following method, which tries to authenticate using Facebook credentials:

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

With POSTman I get the proper response but with wreq I get forbidden access (403). I assume some extra request headers might be added by the library and that's what I would like to check.

Any hints?

EDIT: An http proxy is now being used to check HTTP traffic (wreq requests are not detected though).

Upvotes: 3

Views: 860

Answers (1)

danidiaz
danidiaz

Reputation: 27766

In Wreq, the Options type is an instance of Show, so you can pass it to print, or simply inspect it on 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 = [] }

You can also use the headers lens to focus directly on the headers:

ghci> defaults ^. headers
[("User-Agent","haskell wreq-0.3.0.1")]

But if Wreq is adding some headers after passing the options to postWith, you'll have to use a web debugging proxy like Fiddler to know what's going on.

Upvotes: 3

Related Questions