Haskell:post数据的URL编码

Haskell:post数据的URL编码,haskell,post,url-encoding,Haskell,Post,Url Encoding,我一直在研究,但找不到一种方法来创建正确的URL编码的键/值对 例如,如何从[(键,值)]对列表中生成所需的post数据?我想象这样的东西已经存在(可能隐藏在Network.HTTP包中),但我找不到它,我宁愿不重新发明轮子。看看 urlEncodeVars::[(字符串,字符串)]->字符串 ghci>urlEncodeVars[(“语言”,“哈斯克尔”),(“问候语”,“你好,世界!”) “language=Haskell&greeting=Hello%2C%20world%21” 如果您

我一直在研究,但找不到一种方法来创建正确的URL编码的键/值对

例如,如何从
[(键,值)]
对列表中生成所需的post数据?我想象这样的东西已经存在(可能隐藏在
Network.HTTP
包中),但我找不到它,我宁愿不重新发明轮子。

看看

urlEncodeVars::[(字符串,字符串)]->字符串
ghci>urlEncodeVars[(“语言”,“哈斯克尔”),(“问候语”,“你好,世界!”)
“language=Haskell&greeting=Hello%2C%20world%21”

如果您试图通过HTTP发布数据
x-www-form-urlencoded
urlEncodeVars
可能不是正确的选择。
urlEncodeVars
函数在两个方面不符合要求,值得注意:

  • 它将空格编码为
    %20
    ,而不是
    +
  • 它将
    *
    编码为
    %2A
    而不是
    *
请注意下面函数旁边的注释:


有关一致性编码的示例,请参见
hspec wai
软件包中的。

我建议尝试
wreq
。它提供了
FormParm
数据类型,因此您需要将键值对转换为
[FormParm]
。然后,您可以使用如下内容:

将限定数据.ByteString.Char8导入为C8
导入网络.Wreq(post)
导入Network.Wreq.Types(FormParam(..)
myPost=发布url值,其中
值::[FormParam]
值=[C8.pack“key”:=(“value”::String)]
url=”https://some.domain.name"

Oops,错过了那个。谢谢
-- Encode form variables, useable in either the
-- query part of a URI, or the body of a POST request.
-- I have no source for this information except experience,
-- this sort of encoding worked fine in CGI programming.