之前一直使用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了.
uj5u.com熱心網友回復:
網上可以查到,但這種方法比較麻煩,得到的檔案需要自己決議uj5u.com熱心網友回復:
有2種方式實作 :1、要慢慢試 ,用THTTPRIO 和 TIdSSLIOHandlerSocket ,應該還有一個CookieManagement的控制元件 ,或者還有 不太記得了 。
2、用TIdHttp 加入 TIdSSLIOHandlerSocket ,抓包 然后 模擬發包 IdHttp.Post();
uj5u.com熱心網友回復:
IdSSLIOHandlerSocket.Method:=sslvSSLv23;Mode:=ssImBoth;IdHttp.IOHandler := IdSSLIOHandlerSocket;
另外還需要用到libeay32.dll和ssleay32.dll兩個dll,可以從網上下載
uj5u.com熱心網友回復:
呼叫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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/46063.html
標籤:網絡通信/分布式開發
