Proxy Authentication Required (407) - Consumo de WebService via DELPHI 7
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?
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?
Carlo Ferreira
Curtidas 0
Respostas
Fernando Papile
18/04/2013
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
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
GOSTEI 0
Carlo Ferreira
18/04/2013
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.
Mais uma vez, muito obrigado.
GOSTEI 0
Deivison Melo
18/04/2013
Tópico solucionado?
Podemos dar como encerrado?
Abração e bons códigos!!
Podemos dar como encerrado?
Abração e bons códigos!!
GOSTEI 0
Carlo Ferreira
18/04/2013
Ainda não, visto que não consegui gerar o .DCU.
GOSTEI 0
Ricardo Giasson
18/04/2013
Conseguiu Resolver ? Como ?
GOSTEI 0