Inquiridor
Cookies WebService

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
.Navigate(
"https://srv.orgao.gov.br/app/webservices/wsapp.asmx/Login?login=login&senha=senha") End With With oTempIE.Navigate(sUrlNavigateReport)
.Visible =
True End WithAtt,
Diego
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