Java-Code zu X# / Vulcan übertragbar?
Moderator: wriedmann
Java-Code zu X# / Vulcan übertragbar?
Hallo,
ich möchte eine einfache Http-Kommunikation realisieren. Dazu wird folgender Java-Code vorgegeben:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url))
.setHeader("Authorization", createAuthHeader(uName, password))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("nRESPONSEn------------------------n"+response.body() +"n");
System.out.println("STATUS CODEn------------------------n"+response.statusCode());
Habe es schon mit der Klasse HttpClient aus #using System.Net.Http versucht, komme aber nicht weiter.
Hat jemand einen Vorschlag?
Gruß Jörg
ich möchte eine einfache Http-Kommunikation realisieren. Dazu wird folgender Java-Code vorgegeben:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url))
.setHeader("Authorization", createAuthHeader(uName, password))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("nRESPONSEn------------------------n"+response.body() +"n");
System.out.println("STATUS CODEn------------------------n"+response.statusCode());
Habe es schon mit der Klasse HttpClient aus #using System.Net.Http versucht, komme aber nicht weiter.
Hat jemand einen Vorschlag?
Gruß Jörg
Java-Code zu X# / Vulcan übertragbar?
Hallo Jörg,
das hier funktioniert bei mir:
Wolfgang
das hier funktioniert bei mir:
Code: Select all
method GetResult( cURL as string ) as byte[]
local aResult as byte[]
local oRequest as System.Net.WebRequest
local oCredentials as System.Net.NetworkCredential
local oStream as Stream
local oResponse as System.Net.WebResponse
aResult := byte[]{ 0 }
oRequest := System.Net.WebRequest.Create( cURL )
if ! String.IsNullOrEmpty( _cUserName )
oCredentials := System.Net.NetworkCredential{ _cUserName, _cPassword }
oRequest:Credentials := oCredentials
oRequest:PreAuthenticate := true
endif
oResponse := oRequest:GetResponse()
_cHttpStatus := ( ( System.Net.HttpWebResponse ) oResponse ):StatusDescription
oStream := oResponse:GetResponseStream()
aResult := self:GetBytes( oStream )
oStream:Close()
oResponse:Close()
return aResult
Code: Select all
private method GetBytes( oStream as System.IO.Stream ) as byte[]
local aResult as byte[]
local aBuffer as byte[]
local aChunk as byte[]
local oReader as BinaryReader
local nChunkSize as int
aResult := byte[]{ 0 }
oReader := System.IO.BinaryReader{ oStream }
nChunkSize := 1024
aChunk := oReader:ReadBytes( nChunkSize )
while aChunk:Length > 0
aBuffer := byte[]{ aResult:Length + aChunk:Length }
Array.Copy( aResult, 0, aBuffer, 0, aResult:Length )
Array.Copy( aChunk, 0, aBuffer, aResult:Length, aChunk:Length )
aResult := aBuffer
aChunk := oReader:ReadBytes( nChunkSize )
end
oReader:Close()
return aResult
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Java-Code zu X# / Vulcan übertragbar?
Danke Dir Wolfgang. Ich probiere es mal ohne HttpClient.
Jörg
Jörg
Java-Code zu X# / Vulcan übertragbar?
Hallo,
der Code vom Wolfgang funktioniert für einfache Anmeldung. Aber für die Basic Authentifizierung (entsprechender Base64 String wurde erzeugt) bekomme ich immer nur die Meldung:
"Von der Übertragungsverbindung können keine Daten gelesen werden: Eine vorhandene Verbindung wurde vom Remotehost geschlossen."
Während der Code von einer Internet-Beispielseite, der in einer c#-Konsolen-Anwendung (.NET Core 3.1) bei mir sofort läuft (url, user+pw sind Beispiele):
Gibt es Vorschläge und Hinweise, wie diese Basic Authentifizierung auch unter Vulcan/X# (eingest. Framework 4.0) zum Laufen gebracht werden kann?
Gruß Jörg
der Code vom Wolfgang funktioniert für einfache Anmeldung. Aber für die Basic Authentifizierung (entsprechender Base64 String wurde erzeugt) bekomme ich immer nur die Meldung:
"Von der Übertragungsverbindung können keine Daten gelesen werden: Eine vorhandene Verbindung wurde vom Remotehost geschlossen."
Während der Code von einer Internet-Beispielseite, der in einer c#-Konsolen-Anwendung (.NET Core 3.1) bei mir sofort läuft (url, user+pw sind Beispiele):
Code: Select all
var url = "https://connect.firma.com/simulator/v1";
var httpRequest = (HttpWebRequest)WebRequest.Create(url);
httpRequest.Accept = "application/xml";
httpRequest.Headers["Authorization"] = "Basic VGVzdDpQYXNzd29yZA==";
var httpResponse = (HttpWebResponse)httpRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
Console.WriteLine(httpResponse.StatusCode);
Gruß Jörg
Java-Code zu X# / Vulcan übertragbar?
Hier wäre Wolfgang sein Code von mir erweitert (lauffähig unter Vulcan/X#):
Ich habe bereits alle möglichen Codeschnipsel aus dem Internet zu diesem Thema mit ausprobiert.
Jedoch ist immer bei oRequest:GetResponse() Schluß!
Kann es eventuell sein, dass das eingestellte .NET Framwork 4.0 nicht die Basic Authorization kann?
Gibt es vielleicht Jemanden, bei dem die Basic Authorisation unter Vulcan/X# läuft?
Gruß Jörg
Code: Select all
LOCAL cUrl, _cUserName, _cPassword, _cHttpStatus, cResult, cAuthHeader AS STRING
LOCAL aResult AS BYTE[]
LOCAL oRequest AS System.Net.HttpWebRequest
LOCAL oStream AS Stream
LOCAL oResponse AS System.Net.HttpWebResponse
cUrl := "https://connect.firma.com/simulator/v1"
_cUserName := "Test"
_cPassword := "Password"
aResult := BYTE[]{ 0 }
TRY
oRequest := ( System.Net.HttpWebRequest ) System.Net.WebRequest.Create( cUrl )
oRequest:Accept := "application/xml"
oRequest:Headers["Authorization"] := "Basic VGVzdDpQYXNzd29yZA=="
oRequest:PreAuthenticate := TRUE
oResponse := ( System.Net.HttpWebResponse )oRequest:GetResponse()
_cHttpStatus := ( ( System.Net.HttpWebResponse ) oResponse ):StatusDescription
oStream := oResponse:GetResponseStream()
aResult := self:GetBytes( oStream )
oStream:Close()
oResponse:Close()
CATCH e AS WebException
ErrorBox{ NIL, e:Message }:Show() //"Von der Übertragungsverbindung können keine Daten gelesen werden: Eine vorhandene Verbindung wurde vom Remotehost geschlossen."
END TRY
RETURN aResult
Jedoch ist immer bei oRequest:GetResponse() Schluß!
Kann es eventuell sein, dass das eingestellte .NET Framwork 4.0 nicht die Basic Authorization kann?
Gibt es vielleicht Jemanden, bei dem die Basic Authorisation unter Vulcan/X# läuft?
Gruß Jörg
Java-Code zu X# / Vulcan übertragbar?
Hallo Jörg,
mal nur nach X# umgesetzt:
Ich habe da nur die Syntax umgeschrieben, aber nicht getestet.
Wolfgang
mal nur nach X# umgesetzt:
Code: Select all
var url := "https://connect.firma.com/simulator/v1"
var httpRequest := (HttpWebRequest)WebRequest.Create(url)
httpRequest:Accept := "application/xml"
httpRequest:Headers["Authorization"] := "Basic VGVzdDpQYXNzd29yZA=="
var httpResponse := (HttpWebResponse)httpRequest:GetResponse()
begin using (var streamReader := StreamReader{ httpResponse:GetResponseStream()})
var result := streamReader:ReadToEnd()
end using
Console.WriteLine(httpResponse:StatusCode)
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Java-Code zu X# / Vulcan übertragbar?
Danke Dir Wolfgang. Das Prinzip der Befehlsreihenfolge ist -denke ich- klar.
Und dennoch ist bei oRequest:GetResponse() immer Schluß.
Also muß das Problem tiefer liegen!? Die einzelnen Elemente vom Object oRequest unterscheidet sich
an einigen Stellen von dem des funtionierenden Objectes oRequest in der lauffähigen C# Variante...
Gruß Jörg
Und dennoch ist bei oRequest:GetResponse() immer Schluß.
Also muß das Problem tiefer liegen!? Die einzelnen Elemente vom Object oRequest unterscheidet sich
an einigen Stellen von dem des funtionierenden Objectes oRequest in der lauffähigen C# Variante...
Gruß Jörg
Java-Code zu X# / Vulcan übertragbar?
Hallo Jörg,
dann dürfte das Problem darin liegen, dass Microsoft den Code für .NET Core umgebaut hat.
Und dann dürfte auch der C#-Code mit .NET 4.x nicht funktionieren.
Gibt es das Problem beim Kompilieren oder zur Laufzeit?
Wolfgang
dann dürfte das Problem darin liegen, dass Microsoft den Code für .NET Core umgebaut hat.
Und dann dürfte auch der C#-Code mit .NET 4.x nicht funktionieren.
Gibt es das Problem beim Kompilieren oder zur Laufzeit?
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Java-Code zu X# / Vulcan übertragbar?
Zur Laufzeit - als ob er zwar wollte (alle Ojekte wurden richtig initialisiert), aber nichts mit https anstellen kann...
Java-Code zu X# / Vulcan übertragbar?
Hallo Jörg,
also dieser Code funktioniert bei mir:
Habe ich aus einem laufenden Projekt rauskopiert.
Wolfgang
also dieser Code funktioniert bei mir:
Code: Select all
method GetResponse( cURL as string ) as string
local oRequest as WebRequest
local oResponse as System.Net.WebResponse
local oStream as Stream
local oStreamReader as StreamReader
local cResult as string
cResult := ""
oRequest := WebRequest.Create( cURL )
oRequest:@@Method := "GET"
oRequest:ContentType := "application/json"
if ! String.IsNullOrEmpty( ProgSettings.AccessToken )
oRequest:Headers:Add( "Authorization", "bearer " + ProgSettings.AccessToken )
endif
oResponse := oRequest:GetResponse()
oStream := oResponse:GetResponseStream()
oStreamReader := StreamReader{ oStream }
cResult := oStreamReader:ReadToEnd()
oStream:Close()
oResponse:Close()
return cResult
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it