簡體   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