Proxy Authentication Required (407) - Consumo de WebService via DELPHI 7

18/04/2013

1

Pessoal, estou tentando consumir um WS via DELPHI 7 em uma rede com PROXY. Depois de definir as propriedades do componente HTTPRIO para consumo, chamamos o método da WEB, que roda perfeitamente sem o PROXY. Porém, para passar em rede com PROXY estamos configurando assim:

HTTPRIO1.HTTPWebNode.Proxy := SERVIDORPROXY:PORTA;
HTTPRIO1.HTTPWebNode.UserName := USUARIO;
HTTPRIO1.HTTPWebNode.Password := SENHA;

Mesmo assim dava ACCESS VIOLATION. Depois descobri que tinha que autenticar o PROXY. Pelo que entendi utilizando o seguinte código:

procedure TD1.HTTPRIO1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
begin
if not InternetSetOption(Data, INTERNET_OPTION_USERNAME, PChar(HTTPRIO1.HTTPWebNode.UserName), Length(HTTPRIO1.HTTPWebNode.UserName)) then
ShowMessage(SysErrorMessage(GetLastError));

if not InternetSetOption(Data, INTERNET_OPTION_PASSWORD, PChar(HTTPRIO1.HTTPWebNode.Password), Length (HTTPRIO1.HTTPWebNode.Password)) then
ShowMessage(SysErrorMessage(GetLastError));
end;

Só que ai começou a dar o erro de PROXY AUTHENTICATION REQUIRED (407). Já pesquisei e não consegui achar uma solução.

Alguém tem alguma dica?
Responder

Posts

a causa disso esta aqui:

Unit SOAPHTTPTrans.pas

function THTTPReqResp.SendGet: Integer;
...
Flags := INTERNET_FLAG_DONT_CACHE;
...
Request := HttpOpenRequest(FInetConnect, 'GET', PChar(FURLSite), nil, { Do not localize }
nil, Pointer(AcceptTypes), Flags, Integer(Self));
...
end;

trocar por:

function THTTPReqResp.SendGet: Integer;
...
Flags := INTERNET_FLAG_DONT_CACHE or INTERNET_FLAG_KEEP_CONNECTION;
...
Request := HttpOpenRequest(FInetConnect, 'GET', PChar(FURLSite), nil, { Do not localize }
nil, Pointer(AcceptTypes), Flags, Integer(Self));
...
end;

compilar, pegar o arquivo dcu gerado e colocar na pasta lib do delphi 7

ai ele pegará o proxy do IE

abs
Responder

22/08/2013

Carlo Ferreira

Fernando, muito obrigado pela dica. Trabalho com Delphi 6, localizei o .pas e o .dcu, para alteração. Fiz a alteração no .pas,, renomeando o .dcu, mas não consegui gerar o novo .dcu. Até coloquei o .pas no diretório do projeto, fazendo um uses nela e utilizando um objeto dela, mesmo assim não consegui. Compilou, mas por incrível que pareça, não gerou o .dcu. Será que ele está utilizando o .dcu do D7, visto que também tenho instalado em minha máquina, para testes?

Mais uma vez, muito obrigado.
Responder
Tópico solucionado?

Podemos dar como encerrado?

Abração e bons códigos!!
Responder

23/08/2013

Carlo Ferreira

Ainda não, visto que não consegui gerar o .DCU.
Responder
Conseguiu Resolver ? Como ?
Responder