如何在dy HTTPS post中设置body数据

Mat*_*ech 1 delphi https indy http-post

所以我环顾四周,唯一描述我问题的问题是 6 年前的问题,有 0 个答案,所以我想我会再试一次。

我正在使用 delphi 2009 和 Indy10。

我正在尝试JSON使用 HTTPS 发布到 api。

Instance.FHTTP := TIdHTTP.Create;
Instance.FHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(Instance.FHTTP);

{$IFDEF DEBUG}
Instance.FHTTP.ProxyParams.ProxyPort := 8888;
Instance.FHTTP.ProxyParams.ProxyServer := '127.0.0.1';
{$ENDIF}

Instance.FHTTP.Request.ContentType := 'application/json';
Instance.FAccessToken := Instance.FHTTP.Post('https://somedomain.com/api/endpoint', '{JSONName: JSONValue }' );
Run Code Online (Sandbox Code Playgroud)

我看到很多答案建议有效负载应作为方法中的参数JSON给出,但是当我尝试这样做时,它需要一个文件路径,并抛出一个错误:stringTidHTTP.Post

'无法打开文件“[项目路径{JSONName:JSONValue }]”。指定的文件未找到'。

如果我将 my 添加JSON到 aTStringList并将其作为参数添加,它只会将 JSON 添加到请求的标头中。

任何帮助是极大的赞赏。

DNR*_*DNR 6

Post采用第二个字符串的重载确实将其解释为文件名:

function Post(AURL: string; const ASourceFile: String): string; overload;
Run Code Online (Sandbox Code Playgroud)

这就是为什么这不起作用。您需要改用带有以下内容的重载TStream

function Post(AURL: string; ASource: TStream): string; overload;
Run Code Online (Sandbox Code Playgroud)

您可以将 JSON 放入TStringStream

StringStream := TStringStream.Create('{JSONName: JSONValue }', TEncoding.UTF8);
try
  Instance.FAccessToken := Instance.FHTTP.Post('https://somedomain.com/api/endpoint', StringStream);
finally
  StringStream.Free;
end;
Run Code Online (Sandbox Code Playgroud)