问答

如何在Delphi中进行HTTPS POST请求?

 来源    2018-11-01    0  

在Delphi中执行HTTPS POST请求的最简单方法是什么?我没有提出HTTP POST请求的问题,但是如何使用SSL?我已经google了,没有找到任何解释这个很好的东西.

这是我试过的代码:

procedure TForm1.FormCreate(Sender: TObject);
var
  responseXML:TMemoryStream;
  responseFromServer:string;
begin
  responseXML := TMemoryStream.Create;
  IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(self);
  with idSSLIOHandlerSocketOpenSSL1 do
    begin
      SSLOptions.Method := sslvSSLv2;
      SSLOptions.Mode := sslmUnassigned;
      SSLOptions.VerifyMode := [];
      SSLOptions.VerifyDepth := 0;
      host := '';
    end;

  IdHTTP1 := TIdHTTP.Create(Self);
  with IdHTTP1 do
    begin
      IOHandler := IdSSLIOHandlerSocketOpenSSL1;
      AllowCookies := True;
      ProxyParams.BasicAuthentication := False;
      ProxyParams.ProxyPort := 0;
      Request.ContentLength := -1;
      Request.ContentRangeEnd := 0;
      Request.ContentRangeStart := 0;
      Request.Accept := 'text/html, */*';
      Request.BasicAuthentication := False;
      Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
      HTTPOptions := [hoForceEncodeParams];
    end;
  responsefromserver := IdHTTP1.Post('https://.../','name1=value1&name2=value2&....');
end;

当我尝试运行它,我得到以下错误:

Project myProject.exe raised exception class EFOpenError with message 'Cannot open file "C:\...\Projects\Debug\Win32\name1=value1name2=value2 The system cannot find the file specified'.

我不明白我发送参数,虽然错误听起来像我会发送一个文件.

另外我已经在我的myProject.exe文件夹中包含libeay32.dll和ssleay32.dll.

您没有指定您的Delphi版本或indy版本,但是在使用Delphi 2009和HTTPS的捆绑式Indy之前我有一些问题,当我从indy svn获得最新的源代码时,问题解决了.

相关文章
如何在Cakephp中进行https发布请求
问答我有要求应用程序必须通过HTTPS POST进行REST API调用.我是cakephp的新手.我在想是否可以使用httpsocket进行https调用. 我感谢任何帮助. 谢谢.::如果您启用了PH ...
delphi-xe5 – 如何在Delphi中发出HTTP Patch请求
问答这个问题是关于在Delphi XE5中构建的应用程序. 我正在与第三方合作提供一个应用程序,允许用户通过HTTP帖子将信息(JSON格式)更新到第三方的API.如果我将用户信息分成单个对象,我可以使用 ...
如何在PHP中通过HTTPS发出POST请求?
问答我尝试使用YouTube API及其ClientLogin.这意味着我需要向其服务器发出POST请求. 我需要向https://www.google.com/accounts/ClientLogin发 ...
如何在Tornado中使用HTTPS协议处理请求?
问答我是龙卷风的新手.我开始用"Hello World"代码学习如下: import tornado.ioloop import tornado.web import tornado. ...
如何在Haskell中执行HTTPS请求?
问答如何在Haskell中执行HTTPS请求? 例如,我想从Dropbox API通过HTTPS POST获取请求令牌 我正在使用Windows 8::得益于http-conduit这样的软件包,由tls ...
如何在Delphi中使用.Net程序集而不在GAC或COM中注册?
问答我有一个简单的任务: 是否可以编写一个Delphi DLL,并放置一个.Net程序集(只有一个接口有4个方法和一个类实现接口),并从Delphi DLL中调用它? 我的意思是,如果我为tlb创建一个t ...
如何在Delphi中使用密码对AES-128加密字符串并在C#中解密?
问答我想用AES-128用密码加密Delphi中的字符串.我想将它上传到我的服务器,并能够在C#中使用相同的密码进行解密. 在Delphi中,我使用的是TurboPower LockBox 3: func ...
如何在Delphi中实现并行循环?
问答如何在Delphi(Delphi 200X,Delphi XE)中实现并行循环?怎么做这个最好的方法?有没有通用的解决方案? 请举例说明.::目前最好的解决方案可能是OmniThreadLibrary ...
如何在Delphi中为setter提供第二个参数?
问答我想知道我们是否可以在Delphi中这样做: 我有一个私人程序: procedure SetMySend(const oValue: TTM_MySend_Profile; displayValue: ...
ajax – 如何在delphi中没有close和open数据集的情况下刷新dbgrid?
问答我需要实时刷新dbgrid.关闭和打开数据集工作正常,但闪烁dbgrid.我该怎么做才能避免这种情况? 我想要像Ajax这样的解决方案,只更新必要的解决方案. 谢谢::你有没有试过使用Disable- ...
如何在Delphi中禁用.AsString中的科学记数法?
问答你好 我想从数据库中获取数字,例如,如果数据库中的数字是44.7890000000,我想得到一个字符串44.789,相同的0.0010000000 – > 0.001,只需保留数字并修剪拖尾'0 ...
如何在delphi中设置表单的宽度和高度
问答如何在Delphi 7中设置表单的宽度和高度?表单包含不同类型的控件.我需要将主窗体大小设置为127×263.它应该以编程方式改变 在按钮单击中.::像这样: MainForm.Width := 12 ...
如何在Delphi中重载指定运算符以进行记录
问答我想制作使用动态数组的记录类型. 使用这种类型的变量A和B我希望能够执行操作A:= B(和其他)并且能够修改A的内容而无需修改B,如下面的剪切代码: type TMyRec = record Inne ...
如何在delphi中与HID USB设备通信
问答我一直在研究这个问题一段时间,我似乎无法做到正确.我有一个C版本的软件我想在delphi中制作,但我不能让它在delphi中工作.我需要一些教程或指南,可以告诉我如何连接,读取和写入HID USB设备 ...
如何在delphi中关闭自定义PopupMenu?
问答我有一个带有CoolTrayIcon和PopupMenu的项目,具有禁用的AutoPopup属性. 我想定位PopupMenu并为用户显示它. 位置正常,但如果用户点击或按ESC按钮,菜单不会关闭. ...
是否有编译器设置来控制如何在Delphi中键入浮点文字?
问答虽然e的情况默认情况下工作,但我想更改文字0.1的默认转换,以允许r在没有任何代码修改的情况下工作.这可能通过编译器选项,编译器指令或其他任何东西吗? procedure Test; var s : ...
如何在Delphi中调整大小的TImage的整个区域?
问答我已经将我在Delphi 2009中使用TImage.Canvas绘制的问题缩小到以下可重现的情况: 鉴于:表格,TImage,TLabel和TButton. TImage锚定到所有四个边缘,因此调整 ...
如何在Delphi中使用RTTI或TypeInfo获取枚举的有效范围
问答我在测试项目中使用RTTI来评估枚举值,最常见的是对象的属性.如果枚举超出范围,我想显示类似于评估/修改IDE窗口所显示的文本.像"(超出范围)255"之类的东西. 下面的示例代码 ...
如何在delphi中为未发布但公开的事件创建事件处理程序?
问答在RAD Studio 10.1柏林,很多东西与以前的版本有所不同.在FMX中,有一些以前发布的事件现在已被更改为仅公开. 我有一个使用TStringGrid组件和OnDblClick事件的多平台项目 ...