German Http Header auslesen.

jeng

Member
Licensed User
Longtime User
Hallo,

Ich bin nun schon eine weile damit beschäftigt den http header von meinem server in einen string einzulesen.
Ich komme einfach nicht weiter.
Hier mein ansatz:
B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
   
  Dim url As String
  url = "http://192.168.178.220:8181/status.html"
End Sub

Sub Activity_Create(FirstTime As Boolean)
   
  HttpUtils.CallbackActivity = "Main" 'Current activity name.
  HttpUtils.CallbackJobDoneSub = "JobDone"
  HttpUtils.Download("Job1", url)
  
End Sub

Sub JobDone (Job As String)

 Dim s As String
 If HttpUtils.IsSuccess(url) Then
   s = HttpUtils.GetString(url)
    Log(s)
  Else
    s = HttpUtils.GetString(url)
    Log(s)
End If

End Sub

Und hier die ausgabe des Logs:

B4X:
** Activity (main) Create, isFirst = true **
Starting Job: Job1
** Activity (main) Resume **
** Service (httputilsservice) Create **
** Service (httputilsservice) Start **
Error. Url=http://192.168.178.220:8181 Message=Unauthorized
Access denied.
Task not completed successfully.
** Service (httputilsservice) Destroy **

Error und access denied ist mir klar, nur brauchte ich den ganzen header in etwa so:

B4X:
http://192.168.178.220:8181/status.html

GET /status.html HTTP/1.1
Host: 192.168.178.220:8181
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.178.220:8181/status.html
Authorization: Digest username="test", realm="Forbidden", nonce="cd5f95cfcba489057d11473ec98e7975", uri="/status.html", algorithm=MD5, response="9acecea60f00433ce5ebbede42d9cca4", opaque="23e08175564a437967089f172af3fccb", qop=auth, nc=0000000a, cnonce="68e3c0d516a9cda8"
Connection: keep-alive

:sign0085:

Kann mir da vieleicht einer weiter helfen mit ein paar zeilen code?
Besten Dank im voraus!!
 

Kiffi

Well-Known Member
Licensed User
Longtime User
bin mir nicht sicher, ob Du den Header über die HttpUtils (von
der es übrigens eine verbesserte Version gibt) bekommst.

Wenn Du allerdings den Request über einen HttpClient machst, hast
Du die Möglichkeit den HttpResponse auszuwerten. Dieser verfügt über
die Methode GetHeaders().

Grüße ... Kiffi
 

jeng

Member
Licensed User
Longtime User
bin mir nicht sicher, ob Du den Header über die HttpUtils (von
der es übrigens eine verbesserte Version gibt) bekommst.

Wenn Du allerdings den Request über einen HttpClient machst, hast
Du die Möglichkeit den HttpResponse auszuwerten. Dieser verfügt über
die Methode GetHeaders().

Grüße ... Kiffi

Hey Danke Kiffi für die Antwort.
Hättest du nun noch ein kleines beispiel für mich währe das sehr hilfreich!
Ich kann nicht wirklich was hier mit anfangen.
B4X:
Dim list1 As List
list1 = response.GetHeaders.Get("Set-Cookie")
For i = 0 To list1.Size - 1
    Log(list1.Get(i))
Next

Güße zurück :)
 
Last edited:

Kiffi

Well-Known Member
Licensed User
Longtime User
B4X:
Sub Globals
  Dim myHttpClient As HttpClient
End Sub

[...]
myHttpClient.Initialize("myHttpClient")
Dim myHttpRequest As HttpRequest
myHttpRequest.InitializeGet("http://192.168.178.220:8181/status.html")
If myHttpClient.Execute(myHttpRequest, 1) = False Then Return
[...]

Sub myHttpClient_ResponseSuccess (Response As HttpResponse, TaskId As Int)
  [...]
End Sub

Sub myHttpClient_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)

  Dim myMap As Map
  Dim Counter As Int
  myMap = Response.GetHeaders()
  For Counter = 0 To myMap.Size - 1
    Log(myMap.GetKeyAt(Counter) & ": " & myMap.GetValueAt(Counter))
  Next

End Sub

Grüße ... Kiffi
 

jeng

Member
Licensed User
Longtime User
B4X:
Sub Globals
  Dim myHttpClient As HttpClient
End Sub

[...]
myHttpClient.Initialize("myHttpClient")
Dim myHttpRequest As HttpRequest
myHttpRequest.InitializeGet("http://192.168.178.220:8181/status.html")
If myHttpClient.Execute(myHttpRequest, 1) = False Then Return
[...]

Sub myHttpClient_ResponseSuccess (Response As HttpResponse, TaskId As Int)
  [...]
End Sub

Sub myHttpClient_ResponseError (Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)

  Dim myMap As Map
  Dim Counter As Int
  myMap = Response.GetHeaders()
  For Counter = 0 To myMap.Size - 1
    Log(myMap.GetKeyAt(Counter) & ": " & myMap.GetValueAt(Counter))
  Next

End Sub

Grüße ... Kiffi

:icon_clap:

Wow, vielen Dank Kiffi!
Das funst ja super!
Nun kann ich endlich weiter arbeiten.
Nur noch den string in einzelne variabeln zerteilen und ich kann die Digest authentication errechnen.

Grüße Jeng
 

jeng

Member
Licensed User
Longtime User
Ich glaub mich laust der Affe.:BangHead:
Dank deiner Hilfe Kiffi, hab ich nun den Header, und hab ihn jetzt auch neu erstellt, mit MD5 usw...
Nur, wie sende ich deen den jetzt wieder zurück an den server??
:sign0085:
B4X:
 Authorization: Digest username="test",
              realm="Forbidden",
              nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
              uri="/status.html",
              qop=auth,
              nc=00000001,
              cnonce="0a4f113b",
              response="6629fae49393a05397450978507c4ef1",
              opaque="5ccc069c403ebaf9f0171e9517f40e41"
:sign0085:
 
Last edited:

jeng

Member
Licensed User
Longtime User
versuch es mal mit HttpRequest.SetHeader()

Grüße ... Kiffi

Hallo Kiffi,
Also ich wurschtel jetzt schon ne ganze weile an dieser sache und komme nicht auf einen grünen Zweig.
:BangHead:
Vieleicht hättest du ja mal zeit dich an der verbindung zu versuchen?
Ich könnte dir einen test user einrichten.
Bin mit meinen latein am ende, und ich kann ja auch nicht an der app weiter arbeiten, solange die login prozedur nicht klapt!
Es währe ech sehr hilfreich wenn du mir da vieleicht unter die arme greifen könntest!

mfg
Jeng
 

Kiffi

Well-Known Member
Licensed User
Longtime User
Vieleicht hättest du ja mal zeit dich an der verbindung zu versuchen?
sorry, aber mit dem ganzen Authorization-Krams habe ich mich (zum Glück) noch
gar nicht auseinandersetzen müssen. Da wirst Du höchstwahrscheinlich mehr
Ahnung haben als ich. :)

Grüße ... Kiffi
 
Top