gpt4 book ai didi

http - 我对 delphi 中的 TRestRequest 有疑问

转载 作者:可可西里 更新时间:2023-11-01 16:39:57 24 4
gpt4 key购买 nike

我有连接 RestAPI 服务器的代码。此代码制作了 3 个组件,即 TRestCLientTRestRequestTRestResponse。我会尝试获取 API 响应。但是,一台服务器没有问题,但另一台服务器出现有关无效参数的错误。(ENetHTTPException with message: 'Error querying headers: (87)...) RESTAPI两台服务器上的服务相同。并且错误没有发生在 delphi REST 调试器上...

结果部分错误在我的代码中..但我找不到重点..

  1. 我尝试将类似的设置设置为 Rest Debugger 组件。 -> 这失败了。
  2. 我通过调试跟踪了“System.Net.HttpClient.Win”的“DoExecuteRequest”。
procedure TRestAPI.SetAPIInfo(EnabledKey, EnabledUnit: Boolean);
var
Param: pAPIParameter;
i, iIndex: Integer;
begin
if (FMethodType = '') or (FResource = '') then
Exit;

FRRp.ResetToDefaults;
FRRq.ResetToDefaults;

FRRp.RootElement := '';
FRRq.Params.CreateURLSegmentsFromString(FResource);
FRRq.Method := RESTRequestMethodFromString(FMethodType);
FRRq.Resource := FResource;
FRRq.Params.Clear;

if EnabledKey then
begin
FRRq.Params.AddItem;
FRRq.Params[0].Name := PARAM_KEY_AUTH;
FRRq.Params[0].Value := PARAM_KEY_BEARER + ' ' + FUserKey;
FRRq.Params[0].Kind := pkHTTPHEADER;
FRRq.Params[0].Options := FRRq.Params[0].Options + [poDoNotEncode];
end;

if EnabledUnit then
begin
FRRq.Params.AddItem;
FRRq.Params[1].Name := PARAM_KEY_UNIT_ID;
FRRq.Params[1].Value := IntToStr(FUnitID);
FRRq.Params[1].Kind := pkHTTPHEADER;
FRRq.Params[1].Options := FRRq.Params[1].Options + [poDoNotEncode];
end;

iIndex := FRRq.Params.Count;
if FParamList.Count > 0 then
begin
for I := 0 to FParamList.Count-1 do
begin
Param := FParamList.Items[i];
FRRq.Params.AddItem;
FRRq.Params[iIndex + i].Name := Param^.Name;
FRRq.Params[iIndex + i].Value := Param^.Value;
FRRq.Params[iIndex + i].Kind := Param^.Kind;
FRRq.Params[iIndex + i].Options := FRRq.Params[iIndex + i].Options + [poDoNotEncode];
end;
end;
end;

function TRestAPI.ExcuteAPI(EnabledKey, EnabledUnit, ArrayOfResult: Boolean;
ArrayDSField: array of TDSFieldInfo): Boolean;
begin
Result := False;
FErrCode := -1;
FErrText := '';
FRecordCount := -1;
FAPIResponse := '';

SetAPIInfo(EnabledKey, EnabledUnit);
try
FRRq.Execute;
except
on E:Exception do
begin
SetResultCodeText(999, 'Check the RestAPI.' + NL + e.Message);
Exit;
end;
end;

FAPIResponse := FRRp.Content;
if (FRRp.StatusCode = 200) then
begin
if not SetDataSetField(ArrayDSField) then Exit;
if not JsonToDataSet(ArrayOfResult, FRRp.Content, ArrayDSField) then
begin
ClearDataSetField;
Exit;
end;
FCDS.First;
FRecordCount := FCDS.RecordCount;
end
else if FRRp.StatusCode >= 300 then
begin
SetResultCodeText(FRRp.StatusCode, FRRp.StatusText + NL + FRRp.Content);
Exit;
end;

Result := True;
end;

Exception class ENetHTTPException with message 'Error querying headers: (87) The parameter is incorrect.

最佳答案

错误在我的程序中。

我需要持有者 key 才能发布 REST API。我的程序在多线程环境中。我通过一个线程获得 key 并为每个线程使用 key 。这就是原因。我更改了代码以从每个线程获取 key 。

就是这样。我不知道为什么会出现这个错误。但我知道一个响应 header 的“Cookie”丢失的事实。

关于http - 我对 delphi 中的 TRestRequest 有疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56422350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com