HTTP
Die Http Library erlaubt mit Web Services zu kommunizieren und Resourcen
vom Web herunterzuladen.
Da Netzwerk-Verbindungen langsam und fragil sein können, behandelt diese Library
die Anfragen und Antworten im Hintergrund und löst Events aus, wenn eine
Aufgabe fertig ist.
Es gibt zwei Http-Beispiele die diese Library veranschaulichen:
Currency
Converter englisch und Http
Web Services und mehr (mit Lybraries arbeiten) deutsch.
Flickr
Viewer englisch und Http
ein komplizierteres Beispiel, Flickr Viewer deutsch.
Die Sourcecodes der beiden Beispielprogramme befinden sich in den
englischen Tutorials, die Erklärungen auf deutsch in den Deutschen.
List der Types:
HttpClient
HttpRequest
HttpResponse
Das Hauptobjekt der Library. Dieses Objekt kann mehrere Aufgaben simultan
behandeln. Sehr wichtig, HttpClient muß als eine Process globale Variable
(in Sub Process_Globals) deklariert werden.
Ein typisches Beispiel, einen String herunter zu laden:
Sub Process_Globals
Dim hc As HttpClient
End Sub
Sub Globals
End Sub
Sub Activity_Create(FirstTime
As Boolean)
If FirstTime Then
hc.Initialize("hc")
End If
Dim req As HttpRequest
req.InitializeGet("http://www.basic4ppc.com/")
hc.Execute(req, 1)
End Sub
Sub hc_ResponseSuccess
(Response As HttpResponse, TaskId As Int)
Dim resultString As String
Result = Response.GetString("UTF8")
'Work with the result
End Sub
Sub hc_ResponseError
(Response As HttpResponse, Reason As String, StatusCode As Int, TaskId As Int)
Log("Error connecting:
" & Reason & "
" & StatusCode)
If Response <> Null Then
Log(Response.GetString("UTF8"))
Response.Release
End If
End Sub
Permissions /
Erlaubnisse:
android.permission.INTERNET
Events:
ResponseSuccess (Response As HttpResponse, TaskId As Int)
ResponseError (Reason As String, StatusCode As Int, TaskId As Int)
Members:
Execute
(HttpRequest As
HttpRequest, TaskId As Int) As Boolean
ExecuteCredentials
(HttpRequest As
HttpRequest, TaskId As Int, UserName As String, Password As String) As Boolean
Initialize
(EventName As String)
InitializeAcceptAll
(EventName As String)
SetHttpParameter
(Name As String, Value As Object)
SetProxy (Host As String, Port As Int, Scheme As String)
Members Erklärungen:
Execute (HttpRequest As HttpRequest, TaskId As Int) As Boolean
Führt die HttpRequest Anfrage
asynchron aus. ResponseSuccess oder ResponseError Events werden später
ausgelöst.
Wenn eine Anfrage (request)
mit dem gleichen TaskId bereits läuft, dann gibt diese Methode False zurück und
es wird keine neue Anfrage übermittelt.
Gleiches Verhalten
wie Execute. UserName und Password werden für die Basisauthentifizierung
benutzt.
Initialize (EventName As String)
Initialisiert dieses
Objekt.
WICHTIG: dieses Objekt muß in Sub Process_Globals deklariert werden.
EventName – Das Prefix das für die ResponseSuccess und ResponseError Events
benutzt wird.
InitializeAcceptAll (EventName As String)
Ähnlich wie
Initialize, mit einem großen Unterschied. Alle SSL Certificates werden
automatisch akzeptiert.
Diese Methode sollte nur für Verbindungen mit einem Server in einem
gesicherten Network verwendet werden.
SetHttpParameter (Name As String, Value As Object)
Setzt den Wert des Parameters
mit dem gegebenen Namen.
SetProxy (Host As String, Port As Int, Scheme As String)
Setzt den zu benutzenden
Proxy für die Verbindung.
Host - Proxy Name oder IP.
Port - Proxy Schnitstelle (port).
Scheme - Schema Name. Gewöhnlich "http".
Hält das Ziel-URL fest und andere Daten die dem Webserver gesandt wurden.
Das ursprüngliche Timeout ist auf 30000 Millisekunden (30 Sekonden) gesetzt.
Events:
None
Members:
InitializeGet
(URL As String)
InitializePost
(URL As String, InputStream As java.io.InputStream,
Length As Int)
InitializePost2
(URL As String, Data() As Byte)
RemoveHeaders
(Name As String)
SetContentEncoding
(Encoding As String)
SetContentType
(ContentType As
String)
SetHeader (Name
As String, Value As String)
Timeout As Int [write only]
Members Erklärungen:
Initialisiert
HttpRequest (Abfrage) und setzt sie als eine HttpGet Methode.
InitializePost (URL As String, InputStream As java.io.InputStream, Length As Int)
Initialisiert
HttpRequest (Abfrage) und setzt sie als eine HttpPost Methode.
Der gegebene InputStream wird gelesen und dem Request angefügt.
InitializePost2 (URL As String, Data() As Byte)
Initialisiert
HttpRequest (Abfrage) und setzt sie als eine HttpPost Methode.
Das gegebene Datenarray wird dem Request angefügt.
RemoveHeaders (Name As String)
Alle Header mit dem gegebenen
Namen löschen.
SetContentEncoding (Encoding As String)
Setzt den Encoding
Header des Requests.
Diese Methode darf nur mit Post Requests benutzt werden.
SetContentType (ContentType As String)
Setzt den Mime Header
des Requests.
Diese Methode darf nur mit Post Requests benutzt werden.
SetHeader (Name As String, Value As String)
Setzt den Wert des ersten
Header mit dem gegebenen Namen. Wenn so ein Header nicht existiert wird ein
Neuer hinzugefügt.
Timeout As Int [write only]
Setzt das Request
Timeout, in Millisekunden.
Ein Objekt das die Antworten enthält die vom Server zurück gesandt wurden.
Das Objekt wird in dem ResponseSuccess Event übergeben.
Man kann wählen ob man die Antwort synchron oder asynchron lesen will.
Es ist wichtig dies Objekt freizugeben wenn es nicht mehr gebraucht wird, durch
den Aufruf von Release.
Events:
StreamFinish (Success As Boolean, TaskId As Int)
Members:
ContentEncoding
As String [read only]
ContentLength
As Long [read only]
ContentType As String [read only]
GetAsynchronously
(EventName As String, Output As java.io.OutputStream,
CloseOutput As
Boolean,
TaskId As Int) As Boolean
GetHeaders As Map
GetInputStream
As
InputStreamWrapper
GetString
(DefaultCharset As String) As String
Release
StatusCode As Int [read only]
Members Erklärungen:
ContentEncoding As String [read only]
Gibt den Content Encoding
Header zurück.
ContentLength As Long [read only]
Gibt den Content
Length Header zurück.
ContentType As String [read only]
Gibt den Content Type
Header zurück
GetAsynchronously (EventName As String, Output As java.io.OutputStream, CloseOutput As Boolean, TaskId As Int) As Boolean
Liest asynchron die
Antwort und schreibt sie in den gegebenen OutputStream.
Wenn eine Anfrage
(request) mit dem gleichen TaskId bereits läuft, dann gibt diese Methode False
zurück und das Response Objekt wird freigegeben.
Das StreamFinish
Event wird ausgelöst sobald die Antwort vollkommen gelesen ist
EventName – Der Subroutine Name der das StreamFinish Event behandelt.
Output – Die Daten vom Server werden in diesen Stream geschrieben.
CloseOutput – Definiert ob man den OutputStream am Ende schließen will oder
nicht.
TaskId – Der ID der der Aufgabe (task) zugesetzt ist.
Example:
Sub Http_ResponseSuccess (Response As HttpResponse, TaskId As Int)
Response.GetAsynchronously("ImageResponse", _
File.OpenOutput(File.DirInternalCache,
"image.jpg", False), True, TaskId)
End Sub
Sub ImageResponse_StreamFinish (Success As Boolean, TaskId As Int)
If Success = False Then
Msgbox(LastException.Message, "Error")
Return
End If
ImageView1.Bitmap = LoadBitmap(File.DirInternalCache, "image.jpg")
End Sub
Gibt ein Map Objekt zurück
mit den Headers der Antwort.
Jedes Elements besteht aus einem Schlüssel welcher der Header-Name ist und
einem Wert der eine Liste ist welche die Werte enthält (einer oder mehrere).
Beispiel:
Dim list1 As List
list1 = response.GetHeaders.Get("Set-Cookie")
For i = 0 To list1.Size - 1
Log(list1.Get(i))
Next
GetInputStream As InputStreamWrapper
Gibt den InputStream
zurück den man zum lesen der Antwort benutzen kann.
GetString (DefaultCharset As String) As String
Liest die Antwort und
gibt sie in einem String zurück.
Die gegebene Kodierung wird benutzt wenn die Antwort sie nicht explizit
definiert.
Beispiel:
Dim result As String
result = HttpResponse1.GetString("UTF8")
Release
Gibt die Resourcen,
die diesem Objekt zugewiesen wurden, frei.
StatusCode As Int [read only]
Gibt den HttpCode der
Antwort zurück.