2012-07-31 6 views
7

나는 델파이 XE2와 함께 WSDL 임포터를 사용했으며, 프록시 서버를 사용하려고하는 3 개의 주석이 달린 행을 제외하고 다음과 같은 루틴을 생성합니다.Delphi THTTPRio 인증 프록시 서버를 사용하는 방법

function GetIXYZService(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IXYZService; 
const 
    defWSDL = 'https://server/XYZService.svc?wsdl'; 
    defURL = 'https://server/XYZService.svc'; 
    defSvc = 'Company.XYZ.Services.XYZService'; 
    defPrt = 'BasicHttpBinding_IXYZService'; 
var 
    RIO: THTTPRIO; 
begin 
    Result := nil; 
    if (Addr = '') then 
    begin 
    if UseWSDL then 
     Addr := defWSDL 
    else 
     Addr := defURL; 
    end; 
    if HTTPRIO = nil then 
    RIO := THTTPRIO.Create(nil) 
    else 
    RIO := HTTPRIO; 
    try 
    // RIO.HTTPWebNode.Proxy := 'server_ip:port'; 
    // RIO.HTTPWebNode.Username := 'username'; 
    // RIO.HTTPWebNode.Password := 'password'; 

    Result := (RIO as ISSOService); 
    if UseWSDL then 
    begin 
     RIO.WSDLLocation := Addr; 
     RIO.Service := defSvc; 
     RIO.Port := defPrt; 
    end else 
     RIO.URL := Addr; 
    finally 
    if (Result = nil) and (HTTPRIO = nil) then 
     RIO.Free; 
    end; 
end; 

인증 프록시 서버를 통해 서비스에 액세스해야합니다. 위에 표시된 3 줄을 추가했는데 주석을 제거하면 연결할 수 없습니다. THTTPRio 상태에 대한 도움말 ...

프록시 서버를 사용하거나 서버가 인증을 요구하는 경우, 이 HTTPWebNode 속성의 값이 제공되는 THTTPReqResp 개체의 속성을 사용해야하는 경우 필요한 정보는 입니다.

이 내가했던,하지만 난 내 서비스를 사용하려고 할 때 ESOAPHTTPException가 가진 메시지가 발생을 ...

Unauthorized (407) - 'https://server/XYZService.svc' 

난 후 프록시 설정을 말한다이 게시물을 우연히 발견했습니다 시도한 WSDLLocation, Service 및 Port를 성공으로 설정했습니다.

http://www.delphigroups.info/2/10/555621.html

또한 정의 USE_INDY 건물 있지 않다. 내 서비스는 SSL을 사용하므로 WinInet을 사용하고 있습니다.

이 접근법에 어떤 문제가 있는지 잘 모르겠으니 어떤 도움을 주시면 감사하겠습니다. 마이클

답변

2

this에 따르면

덕분에, WinInet을위한 프록시 인증을 설정하는 2 가지 방법이 있습니다. Soap.SOAPHTTPTrans의 소스 코드에서 HTTP_STATUS_PROXY_AUTH_REQ를 보지 못했습니다. 따라서이 오류를 직접 처리해야합니다. 이를 수행하려면 THTTPReqResp.OnWinInetError 핸들러를 설정하고 HTTP_STATUS_PROXY_AUTH_REQ 오류 코드를 처리하십시오.

또는 THTTPReqResp의 OnBeforePost를 catch하고 base64로 인코딩 된 로그인 및 암호 쌍을 사용하여 HttpAddRequestHeaders를 호출 할 수 있습니다. 도움이 되길 바랍니다.

관련 문제