0

我想使用某些标头、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."无论电子邮件和密码是什么。请注意,这不是一个本身执行某些操作的请求,它是一个身份验证请求(与您单击“登录”按钮时发送的相同),这就是它具有emailpassword表单值的原因(与其/login页面上相同)。

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

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

4

1 回答 1

2

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

于 2014-07-09T10:18:22.223 回答