Moskus Skrevet 21. mai 2012 Del Skrevet 21. mai 2012 Jeg har laget en bitteliten nettjeneste i .NET 4.0. Den er basert på asp.net sin default "New site" template, og bruker følgelig Windows Forms authentication for pålogging. Nå har jeg begynt å lage en liten web API som returnerer et XML-dokument med informasjon basert på input via URL. XML'en skal selvfølgelig tolkes av program eller WP7 mobil app. Jeg tenkte at siden alt er .NET og bruker Windows Forms authentication, så er det bare å bruke NetworkCredentials. Men så enkelt er det ikke. Jeg får kun påloggingssiden tilbake. Private Function GetData(ByVal command As String) As System.Xml.XmlDocument Dim kakeboks As New CookieContainer() 'Silly name but I couldn't resist... Dim url As String = "http://somepage.org/api.aspx?cmd=" & command Dim req As Net.HttpWebRequest = HttpWebRequest.Create(url) req.Method = "GET" req.Credentials = New NetworkCredential("enbruker", "etpassord") req.CookieContainer = kakeboks req.PreAuthenticate = True Dim response As HttpWebResponse = req.GetResponse Dim responsestream As IO.StreamReader = New IO.StreamReader(response.GetResponseStream, System.Text.Encoding.GetEncoding("UTF-8")) 'Getting response Dim output As String = responsestream.ReadToEnd 'Cleaning up responsestream.Close() responsestream.Dispose() responsestream = Nothing response.Close() response = Nothing req = Nothing 'Debug... Console.WriteLine(output) 'Reading the output XML Dim result As New System.Xml.XmlDocument result.LoadXml(output) Return result End Function Hva gjør jeg galt? Lenke til kommentar
brgr Skrevet 24. mai 2012 Del Skrevet 24. mai 2012 Hei, etter hva jeg er kjent med er det ikke så enkelt nei. Windows Forms auth leser ikke automatisk fra network credentials som etter min oppfatning ligger i header som sendes til side, det gjør i og for seg http post data og da som (jeg vil tro) er den mest vanlige metoden for autentisering. Dim req As Net.HttpWebRequest = HttpWebRequest.Create(url) req.Method = "POST" ' Angir forespørsel metode, POST for å sende data req.CookieContainer = kakeboks req.ContentType = "application/x-www-form-urlencoded" ' Setter att det er en data sendt med forespørselen byte[] byteArray = System.Text.Encoding.UTF8.GetBytes("Username=brukernavn&password=passord") Stream dataStream = request.GetRequestStream() dataStream.Write(byteArray, 0, byteArray.Length) dataStream.Close() req.ContentLength = byteArray.Length 'Send forespørsel og legg svar i ny variabel Dim response As WebResponse = request.GetResponse() Kjapt og gale! Prinsippet skal være der. Dette vil neppe fungere med copy paste så du må nok prøve å se hva som gjøres og hvordan det egentlig henger sammen. For å finne ut hva data feltene som forespørs av en side er det å gå til kildekoden på en side og se finne <form> for innloggingen. NetworkCredential fungerer om siden er beskyttet med Windows Pålogging (dvs. att det kommer opp en dialog når du kommer til en side som spør etter brukernavn og passord) gjerne benyttet på interne sider på arbeidsplasser med domene ;-) Håper du mener hva jeg forsto Lenke til kommentar
Moskus Skrevet 25. mai 2012 Forfatter Del Skrevet 25. mai 2012 Hei, etter hva jeg er kjent med er det ikke så enkelt nei. Windows Forms auth leser ikke automatisk fra network credentials som etter min oppfatning ligger i header som sendes til side, det gjør i og for seg http post data og da som (jeg vil tro) er den mest vanlige metoden for autentisering. Dim req As Net.HttpWebRequest = HttpWebRequest.Create(url) req.Method = "POST" ' Angir forespørsel metode, POST for å sende data req.CookieContainer = kakeboks req.ContentType = "application/x-www-form-urlencoded" ' Setter att det er en data sendt med forespørselen byte[] byteArray = System.Text.Encoding.UTF8.GetBytes("Username=brukernavn&password=passord") Stream dataStream = request.GetRequestStream() dataStream.Write(byteArray, 0, byteArray.Length) dataStream.Close() req.ContentLength = byteArray.Length 'Send forespørsel og legg svar i ny variabel Dim response As WebResponse = request.GetResponse() Kjapt og gale! Prinsippet skal være der. Dette vil neppe fungere med copy paste så du må nok prøve å se hva som gjøres og hvordan det egentlig henger sammen. For å finne ut hva data feltene som forespørs av en side er det å gå til kildekoden på en side og se finne <form> for innloggingen. NetworkCredential fungerer om siden er beskyttet med Windows Pålogging (dvs. att det kommer opp en dialog når du kommer til en side som spør etter brukernavn og passord) gjerne benyttet på interne sider på arbeidsplasser med domene ;-) Håper du mener hva jeg forsto Aw, crap! Håpet det skulle være så enkelt... Får bruke POST da. Vel, da får jeg sjekke hva som sendes. Det blir nok litt tricky (for meg) å finne ut da default template gjør mye fancy i bakgrunnen... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå