在TRESTRequest.AddParameter()
方法中使用poDoNotEncode
选项时遇到问题。我需要能够发布带有j_token
标头的请求,该标头的值包括'/'
字符或其他字符。出于这种需要,我到处读到,我可以简单地将poDoNotEncode
添加到请求参数的选项中。
我尝试了几种在互联网上找到的方法,将j_token
标头添加到我的请求中:
var
RESTRequest : TRESTRequest;
RESTClient : TRESTClient;
Response : TRESTResponse;
begin
RESTClient := TRESTClient.Create('http://127.0.0.1:5000/')
RESTRequest := TRESTRequest.Create(nil);
try
RESTRequest.Client := RESTClient;
RESTRequest.Method := rmPOST;
RESTRequest.AddParameter('j_token', 'ga/ga', pkHTTPHEADER, poDoNotEncode);
//RESTRequest.Params.AddHeader('j_token', 'ga/ga').Options := poDoNotEncode;
//RESTRequest.Params.AddItem('j_token', 'ga/ga', pkHTTPHEADER, poDoNotEncode);
RESTRequest.Execute;
Response := RESTRequest.Response;
ShowMessage(Response.Content);
finally
RESTClient.Free;
RESTRequest.Free;
end;
end;
在本例中,我使用自己的API来查看请求头的内容(这里仅为j_token
(。我尝试的每一种方法(评论的(结果都是:
请求标头:ga%2Fga
意味着无论是否指定了poDoNotEncode
,我发送的标头都是url编码的。
只是澄清一下,我目前正在为我工作的公司开发一个项目。该软件应使用Delphi 10.3 Rio作为其脚本语言。
也许它会有所帮助,但当我尝试这样的东西时:
RESTRequest.AddParameter('j_token', 'ga/ga', pkHTTPHEADER, [poDoNotEncode]);
我得到这个错误:
RUNTIME错误:在计算指令PushVar($0,$0,$0,'Result'(时,无法将类型(数组变量(的变量转换为类型(整数(。。。
当我尝试这样的东西时:
RESTRequest.AddParameter('j_token', 'ga/ga', pkHTTPHEADER, TRESTRequestParameterOptions.poDoNotEncode);
然后我得到这个错误:
未声明未知标识符或变量:'TRESTRequestParameterOptions'
我尽量精确,因为我现在完全陷入了困境。如果你需要更精确的答案,我会尽量回答清楚。
我已经解决了我的问题。为了提供背景,我可以访问我公司的档案,以及他们制作的每一个剧本。学习delphi有很大帮助,当我看TRESTRequest.AddParameter()
方法的例子时,我注意到这个方法的第四个参数是一个0,如下所示:
RESTRequest.AddParameter('j_token',mytoken,pkHTTPHEADER,0);
所以我在互联网上查找了0的含义,发现它应该是poDoNotEncode
等参数的一个选项。我仍然想知道他们为什么用0代替它,但我只是猜测,如果你不放任何东西,这是为了避免错误,因为我们的编译器希望RESTRequest.AddParameter()
方法有4个参数。所以最后我开始做同样的事情,直到我需要我的参数来不被编码。但poDoNotEncode
选项不起作用。我试着看看它会在ShowMessage(poDoNotEncode);
中显示什么,它给我显示了一个0。因此,我决定将1而不是poDoNotEncode
作为测试,如下所示:
RESTRequest.AddParameter('j_token',mytoken,pkHTTPHEADER,1);
最后它成功了,我不知道为什么我们的软件更喜欢使用Integers而不是真正的选项名称,但如果你偶然发现这个问题,很有可能你对选项有同样奇怪的定义。
谢谢大家的帮助!