如何设置indy HTTPS post的body数据

时间:2017-02-16 09:52:13

标签: delphi https http-post indy

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

我正在使用delphi 2009和Indy10。

我正在尝试使用HTTPS将final String mFileName = "sample.mp4"; try{ FileOutputStream mFileOutputStream = openFileOutput(mFileName, Context.MODE_PRIVATE ); mFileOutputStream.write(getResources().getAssets().open("sample_video.mp4").read()); mFileOutputStream.close(); Log.v(TAG, "Success"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } MediaController mediaController = new MediaController(this); mediaController.setAnchorView(mVideoView); mVideoView.setMediaController(mediaController); mVideoView.setVideoPath(getFilesDir().getAbsolutePath()+"/sample.mp4"); mVideoView.start(); 发布到API。

JSON

我看到很多答案表明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 }' ); 有效负载应该在JSON方法中作为string param给出,但是当我尝试这样做时,它需要一个文件路径,然后抛出错误说:

  

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

如果我将TidHTTP.Post添加到JSON并添加将其作为参数添加,则只需将JSON添加到请求的标头中。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

带有第二个字符串的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;