none
Cookies WebService RRS feed

  • Pergunta

  • Pessoal,

     

    estou consumindo dois webservices: um para o login e outro para abrir um relatório. Quando tento abrir o relatório em um browser, dá um erro de usuário não autenticado. Assim, tenho que passar os cookies do primeiro webservice(que faz o login) para o segundo. O relatório é aberto por uma chamada de subrotina, só que mesmo com os cookies não funciona, dá erro na resposta do servidor. Eu tenho os cookies só que não sei como passá-lo para o browser. Tive que chamar o relatório direto pelo browser, depois de fazer o login via browser, como no código abaixo. Alguém sabe como passar cookies para o browser, ou fazer sessions no VS2005, para eu não ter que chamar direto do browser, e sim do programa? Desde já agradeço...

    Diego

     

    Dim sUrlNavigatePassword As String = https://srvc.sc.gov.br/app/webservices/wsapp.asmx/Login?login=login&senha=senha

    Dim sUrlNavigateReport As String = "https://srv.orgao.gov.br/app/webservices/ws.asmx/RelatorioOficial?nu=" & ksnu & "&sgUFEmissao=SC&deSerie=B"

    'ABRE RELATÓRIO OFICIAL, COM OS DADOS

    Dim oTempIE As New SHDocVw.InternetExplorer

    With oTempIE

    .Navigate("https://srv.orgao.gov.br/app/webservices/wsapp.asmx/Login?login=login&senha=senha")

    End With

    With oTempIE

    .Navigate(sUrlNavigateReport)

    .Visible = True

    End With

     

    Att,

     

    Diego

     

    quarta-feira, 12 de setembro de 2007 16:42

Todas as Respostas

  • Veja o link abaixo (para aspnet, apenas por curiosidade):

     

    http://support.microsoft.com/kb/820528/pt

     

    Para desktop, vejo que você está usando um WebBrowser

     

        Dim Buffer() As Byte
        Dim myRequest As HttpWebRequest
        Dim WebResp As HttpWebResponse
        Dim Answer As Stream
        Dim _Answer As StreamReader
        Dim cookie As String
                myRequest = WebRequest.Create("https://srv.orgao.gov.br/app/webservices/wsapp.asmx/Login?login")
                myRequest.Method = "POST"
                myRequest.ContentType = "application/x-www-form-urlencoded"
                myRequest.AllowAutoRedirect = False
                myRequest.ContentLength = Buffer.Length
                Dim newStream As Stream = myRequest.GetRequestStream()
                newStream.Write(Buffer, 0, Buffer.Length)
                newStream.Close()
                WebResp = myRequest.GetResponse()
                Dim headers As WebHeaderCollection = WebResp.Headers
                If ((WebResp.StatusCode = HttpStatusCode.Found) Or (WebResp.StatusCode = HttpStatusCode.Redirect) Or (WebResp.StatusCode = HttpStatusCode.Moved) Or (WebResp.StatusCode = HttpStatusCode.MovedPermanently)) Then
                    uri = headers("Location")
                    uri = uri.Trim()
                End If
                If (headers("Set-Cookie") <> Nothing) Then
                    cookie = headers("Set-Cookie")
                End If
                Answer = WebResp.GetResponseStream()
                _Answer = New StreamReader(Answer)
                Dim ds1 As New DataSet()
                Dim Retorno As String = _Answer.ReadToEnd()
                Log("Resposta: " & Retorno)

    Depois, ao enviar um novo pedido é só usar

     

                Dim collHeader As Specialized.NameValueCollection = New Specialized.NameValueCollection()
                If (cookie.Length > 0) Then
                    collHeader.Add("Cookie", cookie)
                End If
                myRequest = WebRequest.Create("https://srv.orgao.gov.br/app/webservices/wsapp.asmx/OutroMétodo")
                myRequest.Method = "POST"
                Dim iCount As Integer = collHeader.Count
                Dim key As String = ""
                Dim keyvalue As String = ""
                For j As Integer = 0 To (iCount - 1)
                    key = collHeader.Keys(j)
                    keyvalue = collHeader(j)
                    myRequest.Headers.Add(key, keyvalue)
                Next
                myRequest.ContentType = "application/x-www-form-urlencoded"
                myRequest.ContentLength = Buffer.Length
                newStream = myRequest.GetRequestStream()
                newStream.Write(Buffer, 0, Buffer.Length)
                newStream.Close()
                WebResp = myRequest.GetResponse()
                Answer = WebResp.GetResponseStream()
                _Answer = New StreamReader(Answer)
                Retorno = _Answer.ReadToEnd()

    e se precisar enviar novamente,

     

                    myRequest = WebRequest.Create("https://srv.orgao.gov.br/app/webservices/wsapp.asmx/OutroMétodo")
                    myRequest.Method = "POST"
                    myRequest.Headers.Add(key, keyvalue)
                    myRequest.ContentType = "application/x-www-form-urlencoded"
                    myRequest.ContentLength = Buffer.Length
                    newStream = myRequest.GetRequestStream()
                    newStream.Write(Buffer, 0, Buffer.Length)
                    newStream.Close()
                    WebResp = myRequest.GetResponse()
                    Answer = WebResp.GetResponseStream()
                    _Answer = New StreamReader(Answer)
                    Retorno = _Answer.ReadToEnd()

     

    Veja o exemplo abaixo para entender melhor:

     

    http://www.codeproject.com/cs/internet/httpwebrequest_response.asp

    sábado, 8 de dezembro de 2007 01:35