之前一直使用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了.

解决方案 »

  1.   

    有2种方式实现 :
    1、要慢慢试 ,用THTTPRIO  和  TIdSSLIOHandlerSocket   ,应该还有一个CookieManagement的控件  ,或者还有 不太记得了 。
    2、用TIdHttp 加入 TIdSSLIOHandlerSocket  ,抓包 然后 模拟发包 IdHttp.Post();
      

  2.   

    IdSSLIOHandlerSocket.Method:=sslvSSLv23;Mode:=ssImBoth;
    IdHttp.IOHandler := IdSSLIOHandlerSocket;
    另外还需要用到libeay32.dll和ssleay32.dll两个dll,可以从网上下载
      

  3.   

    调用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;