Haskell:post数据的URL编码
我一直在研究,但找不到一种方法来创建正确的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” 如果您
[(键,值)]
对列表中生成所需的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.