Ir para o conteúdo
miguel5655

WebRequest com Proxy

Mensagens Recomendadas

miguel5655

Boas pessoal,

Precisava da opinião de alguém que perceba como fazer um WebRequest numa aplicação (Windows forms) caso o cliente use Proxy para aceder á Internet.

Já li e pesquisei muito sobre este assunto mas vejo tantas formas de fazer que fico confuso, depois umas definições funcionam para uns outras para outro e deixa-me confuso.

É assim estou a desenvolver parte de uma aplicação que usa um WebService que temos alojado em IIS na nossa empresa. Até aqui tudo bem.

Existem alguns clientes que usam Proxy para aceder á internet, portanto tenho de prever todas as possibilidades de configuração caso o Cliente use proxy e consoante as regras que usam, (se tem autenticação ou não, se pode usar as definições dor defeito do IE, etc....). Portanto a minha ideia é criar um form e o respectivo código em que seja totalmente personalizável, de acordo com os Proxy's de cada um.

Vou-vos mostrar o excerto do código que uso para fazer o Request, e depois explico-vos a minha ideia para ver se está correta:

   Public Function CheckURLResponse(ByVal _url As String) As String
       Dim request As WebRequest = WebRequest.Create(_url)
       webRequestProxy(request)
       Dim result As String = Nothing
       Dim response As WebResponse
       Try
           response = request.GetResponse()
           response.Close()
       Catch ex As Exception
           response = Nothing
           result = ex.Message
       End Try
       If response IsNot Nothing Then
           result = CType(response, HttpWebResponse).StatusDescription
       End If
       Return result
   End Function

   Public Sub webRequestProxy(_webRequest As WebRequest)
       Try
           Dim username = My.Settings.username
           Dim password = My.Settings.pass
           Dim bypass As Boolean = My.Settings.byPassProxy
           Dim defaultProxy As Boolean = My.Settings.defaultProxy
           Dim server As String = My.Settings.serverProxy
           Dim port As String = My.Settings.portProxy
           Dim required As Boolean = My.Settings.authRequired

           Dim defProxy As IWebProxy = Nothing
           Dim myProxy As WebProxy

           _webRequest.Credentials = CredentialCache.DefaultCredentials
           If My.Settings.defaultProxy Then
               defProxy = WebRequest.GetSystemWebProxy()
               If required Then
                   If username.Length > 0 And username <> "" And password.Length > 0 And password <> "" Then
                       defProxy.Credentials = New NetworkCredential(username.ToString, password.ToString)
                   End If
               End If
               _webRequest.Proxy = defProxy
           Else
               If server <> "" And server.Length > 0 And port <> "" And port.Length > 0 Then
                   myProxy = New WebProxy(server, CInt(port))
                   myProxy.BypassProxyOnLocal = CBool(bypass)
                   If required Then
                       If username.Length > 0 And username <> "" And password.Length > 0 And password <> "" Then
                           myProxy.Credentials = New NetworkCredential(username.ToString, password.ToString)
                       End If
                   End If
                   _webRequest.Proxy = myProxy
               End If
           End If
       Catch ex As Exception
           MessageBox.Show(ex.Message, "Error proxy", MessageBoxButtons.OK, MessageBoxIcon.Error)
       End Try
   End Sub

Ora, sempre que quero usar o WebService chamo a função CheckURLResponse e passo como argumento o url do WebService. Por sua vez, esta função chama um método para definir se usa Proxy ou não, conforme a configuração do cliente.

Não sei se estou correto mas vou explicar como penso que funciona:

Janela configuração Proxy:

proxys.png

1º Tento sempre usar as DefaultCredentials. _webRequest.Credentials = CredentialCache.DefaultCredentials

Aqui não sei se devo usar "DefaultCredentials" ou "DefaultNetworkCredentials".

2º Por defeito o "Use default Settings IE/Chrome" está ativo portanto no código ele vai executar: defProxy = WebRequest.GetSystemWebProxy()

O GetSystemWebProxy se estou correto vai buscar as definições do IE (host, port, bypasslocal), excepto a autenticação.

Caso a autenticação seja necessária.

               If required Then
                   If username.Length > 0 And username <> "" And password.Length > 0 And password <> "" Then
                       defProxy.Credentials = New NetworkCredential(username.ToString, password.ToString)
                   End If
               End If
               _webRequest.Proxy = defProxy

Aqui é passado o Username e password para se autenticar no Proxy e o defProxy é passado ao _webRequest.Proxy.

3º Caso o Servidor e Porta estejam configurados, ou seja o "Use default Settings IE/Chrome" está Unchecked:

                   myProxy = New WebProxy(server, CInt(port))
                   myProxy.BypassProxyOnLocal = CBool(bypass)

Caso exista autenticação:

                   If required Then
                       If username.Length > 0 And username <> "" And password.Length > 0 And password <> "" Then
                           myProxy.Credentials = New NetworkCredential(username.ToString, password.ToString)
                       End If
                   End If
                   _webRequest.Proxy = myProxy

Não sei se desta forma estou a prever corretamente todas as situações possíveis:

- Usar definições do IE (servidor, porta, bypasslocal)

- Não sei se devo usar ou em que situações:

_webRequest.Credentials = CredentialCache.DefaultCredentials
OR
_webRequest.Credentials = CredentialCache.DefaultNetworkCredentials

Sei que existem formas de configurar a app.config para usar o proxy, mas como não me sinto muito á vontade prefiro programar.

Agradecia a vossa ajuda e este até pode ser um exemplo para quem queira fazer algo do género.

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.