Delphi RESTDebugger GET请求URL编码的哈希%23不起作用

时间:2018-12-17 10:19:41

标签: rest delphi url-encoding

我需要使一个简单的REST GET调用正常工作,例如

.../process('123')  -> working
.../process('123#') -> of course not working
.../process('123%23') -> should be working

在REST工具“邮递员”中,它使用编码的URL,即#->%23

我尝试了以下设置

Content-type: application/json; charset=utf-8

Content-type: application/x-www-form-urlencoded; charset=UTF-8

两者都不起作用。

请咨询 谢谢 拉尔夫

1 个答案:

答案 0 :(得分:0)

Datasnap.DSClientRest单元中的EncodeURIComponent对我造成相同的问题。

我的解决方法是将单元复制到源目录,并更改函数EncodeURIComponent,以将TNetEncoding.URL.Encode的选项从[]更改为[TURLEncoding.TEncodeOption.EncodePercent],这样新的结果行将如下所示:< / p>

Result := TNetEncoding.URL.Encode(AStr, UnsafeChars, [TURLEncoding.TEncodeOption.EncodePercent]);

原因是,如果在没有[TURLEncoding.TEncodeOption.EncodePercent]的情况下调用该部分

if not(TEncodeOption.EncodePercent in Options) and (I + 2 < Len) and (Buff[I] = Ord('%')) and
    IsHexChar(Buff[I + 1]) and IsHexChar(Buff[I + 2]) then
  begin
    Result := Result + '%' + Char(Buff[I + 1]) + Char(Buff[I + 2]);
    Inc(I, 3);
  end
如果以下两个字符是有效的十六进制字符,则

将不会编码%。