delphi调用Https的webservice

hl_bobo520 2017-12-05 03:12:12
之前一直使用THTTPRIO调用C#写的http的webservice,现在要换成https的webservice,网上查了资料用TIdHTTPt和TIdSSLIOHandlerSocket实现,具体用法不清楚,请各位大侠帮帮忙,谢谢!
procedure TForm1.Button1Click(Sender: TObject);
begin
HTTPRIO1.WSDLLocation:='http://192.168.1.151/JYYWXTService/Service.asmx?wsdl';
HTTPRIO1.HTTPWebNode.UseUTF8InHeader:=true;
HTTPRIO1.Service:='JYYWXTService';
HTTPRIO1.Port:='JYYWXTServiceSoap';
SaveServe:= HTTPRIO1 as JYYWXTServiceSoap;
Memo1.Lines.Add(SaveServe.UploadData('21010117113000001','18C55','B1,B2,B3,'));// UploadData接口函数
end;

现在换成了“https://192.168.1.151/JYYWXTService/Service.asmx?wsd”不知道怎么调用UploadData了.
...全文
1594 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ron_xin 2018-01-08
  • 打赏
  • 举报
回复
调用https需要libeay32.dll和ssleay32.dll;

function TFrmMain.IdHTTPCallWebservice(RequestSOAPHeader: string;var Response:string): Boolean;
Var
  sends:TStringList;
  ResponseStream:TStringStream;
  err_code:string;
begin
  ResponseStream:=TStringstream.Create('',TEncoding.UTF8);
  //idhttp1.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(self);
  idhttp1.AllowCookies := false;
  idhttp1.HandleRedirects := false ;
  idHttp1.Request.ContentType:='text/xml';
  //idHttp1.Request.ContentType := 'application/x-www-form-urlencoded';
  idHttp1.Request.Charset := 'utf-8';
  idHttp1.HTTPOptions :=[]; //关闭自动编码

  sends := TStringList.Create;
  sends.Text :=RequestSOAPHeader;

  //Webservice_url:='https://172.16.45.206:8443/oltp/ws/CksServices';
  idhttp1.Post(Webservice_url,sends,ResponseStream);

  mmo1.Lines.Clear;

  Response :=ReplaceXMLSpecialChr(ResponseStream.DataString);
  if CheckWebservicefault(Response,err_code) then
    begin
      mmo1.Lines.Add(Response);
      mmo1.Lines.SaveToFile(extractfilepath(ParamStr(0))+'log\'+edtTRANSACTION_ID.Text+FormatDateTime('yyyyMMddHHmmss',now)+'.log');
      ShowMessage(err_code);
      Result :=False;
    end
  else
    begin
      mmo1.Lines.Add(Response);
      mmo1.Lines.SaveToFile(extractfilepath(ParamStr(0))+'log\'+edtTRANSACTION_ID.Text+FormatDateTime('yyyyMMddHHmmss',now)+'.log');
      Result :=True;
    end;
end;
xiaocongzhi 2017-12-16
  • 打赏
  • 举报
回复
IdSSLIOHandlerSocket.Method:=sslvSSLv23;Mode:=ssImBoth; IdHttp.IOHandler := IdSSLIOHandlerSocket; 另外还需要用到libeay32.dll和ssleay32.dll两个dll,可以从网上下载
Mr Dang 2017-12-16
  • 打赏
  • 举报
回复
有2种方式实现 : 1、要慢慢试 ,用THTTPRIO 和 TIdSSLIOHandlerSocket ,应该还有一个CookieManagement的控件 ,或者还有 不太记得了 。 2、用TIdHttp 加入 TIdSSLIOHandlerSocket ,抓包 然后 模拟发包 IdHttp.Post();
日月路明 2017-12-06
  • 打赏
  • 举报
回复
网上可以查到,但这种方法比较麻烦,得到的文件需要自己解析

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧