繁体   English   中英

如何在Indy HTTPS帖子中设置正文数据

[英]How to set body data indy HTTPS post

所以我环顾四周,唯一描述我的问题的问题是6岁零答案,所以我想我会再试一次。

我正在Indel10中使用delphi 2009。

我正在尝试使用HTTPS将JSON发布到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 }' );

我已经看到很多答案,建议在TidHTTP.Post方法中将JSON有效负载作为string参数给出,但是当我尝试这样做时,它期望一个文件路径,并抛出一条错误消息:

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

如果我将JSON添加到TStringList并添加TStringList作为参数,则它将JSON添加到请求的标头中。

任何帮助是极大的赞赏。

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

function Post(AURL: string; const ASourceFile: String): string; overload;

这就是为什么这不起作用。 您需要改为使用需要TStream的重载:

function Post(AURL: string; ASource: TStream): string; overload;

您可以将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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM