在后https请求中设置表单值

时间:2014-07-09 05:38:12

标签: haskell networking https http-conduit

我想使用特定标头,Cookie和表单值执行请求。我是这样做的:

  import Network.HTTP.Conduit
  import Network.HTTP.Types
  --.......omitted


  configReq r = r { method = methodPost
  , requestHeaders = (requestHeaders r) ++ [
      (DS.fromString "Referer", DS.fromString "https://server...."),
      (DS.fromString "SomeHeader2", DS.fromString "fdsfdsfds")
    ]
  , requestBody = RequestBodyLBS (Aeson.encode $ Map.fromList [("email", "my@mail.com"), ("password", "7890")])
  , secure = True
  , cookieJar = [myCookie]
 }

这似乎应该有效。但它并不是因为服务器返回400 - > "X-Response-Body-Start","Invalid input."无论电子邮件和密码是什么。请注意,这不是执行某些操作的请求,而是身份验证请求(当您点击&#34时发送的同一个;登录"按钮)这就是为什么它具有emailpassword表单值(与其/login页面上的相同)。

我认为即使如此表单值 emailpassword也在请求中,它们必须设置不同,这意味着它们必须不在{{ 1}}但在某个不同的地方。

所以现在的问题是,如果不在requestBody,我必须在哪里放emailpassword

1 个答案:

答案 0 :(得分:2)

最有可能的是,Web服务器是预期的URL编码表单数据,而不是JSON请求正文。您可以为此目的使用恰当命名的urlEncodedBody函数。