设置post https请求中的表单值



我想用特定的标头、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呢?

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

最新更新