表单上有一个TIdHTTP组件,我正在向基于云的服务器发送超文本传输协议POST请求。一切工作出色,除了1个字段:一个带加号的文本字符串,例如“你好世界狗”,被保存为“你好世界狗”。
在研究这个问题时,我意识到URL中的“”被视为一个空格,因此必须对其进行编码。这就是我被难倒的地方;POST请求的其余部分似乎由TIdHTTP组件编码,但“”除外。
通过Fiddler查看该请求,它将作为“hello world dog”发送。如果我手动编码“”(hello world+dog),结果是“hello world%2Bdog”。
我真的不知道我在这里做什么,所以如果有人能给我指出正确的方向,我将不胜感激。
其他资料:
我正在使用Delphi 2010。组件没有任何特殊设置,我想我可能需要设置一些东西?Fiddler中的标头内容类型是“应用/x-wow-form-urlencoded”。
然后,Delphi代码:
Request:='hello world+dog';
URL :='http://............./ExecuteWithErrors';
TSL:=TStringList.Create;
TSL.Add('query='+Request);
Try
begin
IdHTTP1.ConnectTimeout:=5000;
IdHTTP1.ReadTimeout :=5000;
Reply:=IdHTTP1.Post(URL,TSL);
您使用的是过时的Indy版本,需要升级。
TIdHTTP的webform数据编码器在2010年末进行了几次更改。您的版本似乎早于所有这些更改。
在您的版本中,TIdHTTP
在内部使用TIdURI.ParamsEncode()
对表单数据进行编码,其中空格字符编码为,而
字符未编码,因此:
hello%20world+dog
2010年10月,编码器更新为将空格字符编码为
hello&world+dog
2010年12月初,编码器更新为将空格字符编码为
,因此:
hello+world+dog
2010年12月下旬,编码器被完全重写,以遵循W3C的超文本标记语言规范
Application/x-wow-form-urlencoded
。空格字符编码为,字符编码为
+
,因此:
hello+world%2Bdog
在所有情况下,只有当
TIdHTTP. HTTPOptions
属性(默认情况下是该属性)中启用了hoForceEncodeParams
标志时,才会应用上述逻辑。如果升级不是一个选项,您将不得不禁用hoForceEncodeParams
标志,并自己手动编码TStringList
内容:
Request:='hello+world%2Bdog';
我正在使用spring boot,spring安全,OAuth2和JWT来验证我的应用程序,但我一直得到这个令人讨厌的错误,我不知道什么是错误的。我的类: : : 除: 我的实体模型类是: 实体: 实体: 我在数据库中的密码是正确加密的spring安全BCrypt,它的数据类型是varchar(255),大于60。
问题内容: 我通过AJAX将表单字段的内容发布到PHP脚本,并使用JavaScript来发布。问题在于,任何加号都被删除并被空格代替。如何安全地“编码”加号,然后在PHP端适当地“解码”它? 问题答案: 在JS和PHP中使用时,您应该收到正确的值。 注意:当您访问,或在PHP中,要检索已经被解码值。 例: 在您的JS中: 在您的服务器上: 只有原始的HTTP请求包含url编码的数据。 对于GET请
本文向大家介绍shiro编码和加密代码详解,包括了shiro编码和加密代码详解的使用技巧和注意事项,需要的朋友参考一下 涉及到密码存储问题上,应该加密/生成密码摘要存储,而不是存储明文密码。比如之前的600w csdn账号泄露对用户可能造成很大损失,因此应加密/生成不可逆的摘要方式存储。 编码/解码 Shiro提供了base64和16进制字符串编码/解码的API支持,方便一些编码解码操作。Shi
我有这样一个csv文件 我在读书
代码不编译。我不明白错误是什么,请帮忙) 错误文本:g-Wall-c“main.cpp”(/media/ad/4GB-NTFS/prog/laba2)main。cpp:In函数“int main()”:main。cpp:46:12:错误:调用“Record::Record()”记录r1;^主要的cpp:12:1:注意:候选者:Record::Record(std::\u cxx11::string