TRESTRequest.AddParameter()方法中的poDoNotEncode选项出现问题



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而不是真正的选项名称,但如果你偶然发现这个问题,很有可能你对选项有同样奇怪的定义。

谢谢大家的帮助!

最新更新