Welcome, Guest
Username: Password: Remember me
Hier wird Deutsch gesprochen
  • Page:
  • 1
  • 2

TOPIC:

Java-Code zu X# / Vulcan übertragbar? 23 Nov 2021 11:15 #20491

  • comitas2


  • Posts: 31
  • 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("\nRESPONSE\n
    \n"+response.body() +"\n");
    System.out.println("STATUS CODE\n
    \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

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 23 Nov 2021 11:35 #20493

    • wriedmann
    • wriedmann's Avatar


  • Posts: 2836
  • Hallo Jörg,
    das hier funktioniert bei mir:
    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
    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
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Last edit: by wriedmann.

    Java-Code zu X# / Vulcan übertragbar? 23 Nov 2021 11:39 #20494

    • comitas2


  • Posts: 31
  • Danke Dir Wolfgang. Ich probiere es mal ohne HttpClient.
    Jörg

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 12:20 #20582

    • comitas2


  • Posts: 31
  • 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):
    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);

    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

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 14:04 #20587

    • comitas2


  • Posts: 31
  • Hier wäre Wolfgang sein Code von mir erweitert (lauffähig unter Vulcan/X#):
    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

    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

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 14:10 #20588

    • wriedmann
    • wriedmann's Avatar


  • Posts: 2836
  • Hallo Jörg,
    mal nur nach X# umgesetzt:
    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)
    Ich habe da nur die Syntax umgeschrieben, aber nicht getestet.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 14:20 #20591

    • comitas2


  • Posts: 31
  • 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

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 14:24 #20592

    • wriedmann
    • wriedmann's Avatar


  • Posts: 2836
  • 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
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 14:29 #20594

    • comitas2


  • Posts: 31
  • Zur Laufzeit - als ob er zwar wollte (alle Ojekte wurden richtig initialisiert), aber nichts mit https anstellen kann...

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 14:56 #20595

    • wriedmann
    • wriedmann's Avatar


  • Posts: 2836
  • Hallo Jörg,
    also dieser Code funktioniert bei mir:
    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
    Habe ich aus einem laufenden Projekt rauskopiert.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 14:58 #20596

    • wriedmann
    • wriedmann's Avatar


  • Posts: 2836
  • Hallo Jörg,
    noch was: für TLS 1.2 braucht es das hier
    System.Net.ServicePointManager.SecurityProtocol := System.Net.SecurityProtocolType.Tls12
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 15:15 #20598

    • comitas2


  • Posts: 31
  • Hallo Wolfgang,
    wo kommt "System.Net.ServicePointManager.SecurityProtocol := System.Net.SecurityProtocolType.Tls12" hin?
    Bedarf es noch irgendwelcher Assembly-Hinweise?
    Jörg

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 15:20 #20599

    • wriedmann
    • wriedmann's Avatar


  • Posts: 2836
  • Hallo Jörg,
    das Security-Protokoll muss einmalig in Deiner Applikation gesetzt werden.
    Das ist komplett qualifiziert, also mit kompletter Namespace-Angabe, also braucht es kein using-Statement dafür.
    An Abhängigkeiten habe ich nur System, System.Data, System.Net.Http, System.Xml und System.Runtime.Serialization drin.
    Die brauche ich aber teilweise für anderen Code in dieser Lib.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 15:47 #20601

    • comitas2


  • Posts: 31
  • Hallo Wolfgang,
    sorry - egal wo ich "System.Net.ServicePointManager.SecurityProtocol := System.Net.SecurityProtocolType.Tls12" hinsetze, ich erhalte immer Fehlermeldungen und es ist nicht compilierbar ...
    Jörg

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 15:54 #20602

    • wriedmann
    • wriedmann's Avatar


  • Posts: 2836
  • Hallo Jörg,
    welche Fehlermeldung bekommst Du?
    Und welche Framework-Version hast Du aktiv?
    Ggf. probier mal, ob das auch so funktioniert.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 16:03 #20603

    • comitas2


  • Posts: 31
  • Hallo Wolfgang,
    * .NET Framework 4.0
    * expecting EOF, found 'System.Net.ServicePointManager.SecurityProtocol'
    Jörg

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 16:10 #20605

    • wriedmann
    • wriedmann's Avatar


  • Posts: 2836
  • Hallo Jörg,
    das muss in einer Klasse drin stehen, ich habe es bei mir im Constructor drin.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 16:17 #20606

    • comitas2


  • Posts: 31
  • Hallo Wolfgang,
    trotz Deiner Mühen -
    * auch Dein herauskopierter Code läuft nicht
    * im Constructor platziert kommt jetzt: 'System.Net.ServicePointManager.SecurityProtocol': unknown identifier
    Jörg

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 16:19 #20607

    • comitas2


  • Posts: 31
  • Korrektur:
    * im Constructor platziert kommt jetzt: 'System.Net.SecurityProtocolType.Tls12': unknown identifier

    Please Log in or Create an account to join the conversation.

    Java-Code zu X# / Vulcan übertragbar? 29 Nov 2021 16:38 #20608

    • wriedmann
    • wriedmann's Avatar


  • Posts: 2836
  • Hallo Jörg,
    das verstehe ich nicht.
    Ist laut Doku in der Library System.Net drin, und auch im Framework 4.8:
    docs.microsoft.com/en-us/dotnet/api/syst...iew=netframework-4.8
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    • Page:
    • 1
    • 2
    Moderators: wriedmann