Seite 1 von 2

PB.Ex Network (Windows)

Verfasst: 03.03.2018 22:50
von RSBasic
Hallo,

vor einiger Zeit habe ich eine PowerShell-Lösung in diesem Thread gepostet, um mit Deepl.com Texte übersetzen zu lassen.
Mit den von PB bereitgestellten Netzwerkfunktionen ist das leider nicht möglich, Daten per POST an eine HTTPS-Website zu senden.
Deshalb habe ich für euch eine DLL-Bibliothek entwickelt, damit man sowas auch in PB machen kann. Außerdem kann man auch jedes Formular per POST ausfüllen und ausführen.

Funktionen:
  • SendNetworkFormFields()
    • Syntax:

      Code: Alles auswählen

      Result = SendNetworkFormFields(URL$, Array, ArraySize, @Output$, @ErrorOutput)
    • Beschreibung: Sendet per POST ein Array mit den angegebenen Feldern an ein Formular einer Website.
    • Parameter:
      1. URL$: Die Zieladresse der Website, wohin die Daten gesendet werden sollen.
      2. Array: Ein String-Array mit den einzelnen Feldern wird an die Website gesendet. Feldname und Feldwert müssen separat gespeichert werden.
      3. ArraySize: Anzahl der Elemente.
      4. @Output$: Der Rückgabewert von der Website wird in die String-Variable gespeichert.
      5. @ErrorOutput: Falls ein Fehler auftritt, wird die Fehlermeldung in die String-Variable gespeichert.
    • Rückgabewert:
      • 1: Der Vorgang war erfolgreich.
    • Beispielcode:

      Code: Alles auswählen

      EnableExplicit
      
      Global PBEx_Network
      
      CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
        PBEx_Network = OpenLibrary(#PB_Any, "PB.Ex_Network_x86.dll")
      CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
        PBEx_Network = OpenLibrary(#PB_Any, "PB.Ex_Network_x64.dll")
      CompilerEndIf
      
      If PBEx_Network
        Prototype SendNetworkFormFields(URL.p-Unicode, Array, ArraySize, Output, ErrorOutput)
        Global SendNetworkFormFields.SendNetworkFormFields = GetFunction(PBEx_Network, "SendNetworkFormFields")
        Prototype SendNetworkJSON(URL.p-Unicode, JSON.p-Unicode, Output, ErrorOutput)
        Global SendNetworkJSON.SendNetworkJSON = GetFunction(PBEx_Network, "SendNetworkJSON")
        
        Define Output$ = Space(100000)
        Define ErrorOutput$ = Space(1024)
        Define StartPosition
        Define EndPosition
        Dim MyArray.s(3)
        
        MyArray(0) = "firstname"
        MyArray(1) = "Pure"
        MyArray(2) = "lastname"
        MyArray(3) = "Basic"
        
        SendNetworkFormFields("https://www.w3schools.com/action_page.php", MyArray(), ArraySize(MyArray())+1, @Output$, @ErrorOutput$)
        StartPosition = FindString(Output$, "<h2>")
        EndPosition = FindString(Output$, "</div>")
        Debug Mid(Output$, StartPosition, EndPosition-StartPosition)
        
        CloseLibrary(PBEx_Network)
      EndIf
  • SendNetworkJSON()
    • Syntax:

      Code: Alles auswählen

      Result = SendNetworkJSON(URL$, JSON$, @Output$, @ErrorOutput)
    • Beschreibung: Sendet per POST einen JSON-String an eine Website.
    • Parameter:
      1. URL$: Die Zieladresse der Website, wohin die Daten gesendet werden sollen.
      2. JSON$: Ein String im JSON-Format wird an die Website gesendet.
      3. @Output$: Der Rückgabewert von der Website wird in die String-Variable gespeichert.
      4. @ErrorOutput: Falls ein Fehler auftritt, wird die Fehlermeldung in die String-Variable gespeichert.
    • Rückgabewert:
      • 1: Der Vorgang war erfolgreich.
    • Beispielcode:

      Code: Alles auswählen

      EnableExplicit
      
      Global PBEx_Network
      
      CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
        PBEx_Network = OpenLibrary(#PB_Any, "PB.Ex_Network_x86.dll")
      CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
        PBEx_Network = OpenLibrary(#PB_Any, "PB.Ex_Network_x64.dll")
      CompilerEndIf
      
      If PBEx_Network
        Prototype SendNetworkFormFields(URL.p-Unicode, Array, ArraySize, Output, ErrorOutput)
        Global SendNetworkFormFields.SendNetworkFormFields = GetFunction(PBEx_Network, "SendNetworkFormFields")
        Prototype SendNetworkJSON(URL.p-Unicode, JSON.p-Unicode, Output, ErrorOutput)
        Global SendNetworkJSON.SendNetworkJSON = GetFunction(PBEx_Network, "SendNetworkJSON")
        
        Define Output$ = Space(1024)
        Define ErrorOutput$ = Space(1024)
        Define JSON$
        Define CurrentJSON
        Define Sentence$ = "Hallo Welt"
        Define FromLang$ = "DE"
        Define ToLang$ = "EN"
        
        JSON$ + ~"{"
        JSON$ + ~"   \"jsonrpc\":\"2.0\","
        JSON$ + ~"   \"method\":\"LMT_handle_jobs\","
        JSON$ + ~"   \"params\":{"
        JSON$ + ~"      \"jobs\":["
        JSON$ + ~"         {"
        JSON$ + ~"            \"kind\":\"Default\","
        JSON$ + ~"            \"raw_en_sentence\":\"" + Sentence$ + ~"\""
        JSON$ + ~"         }"
        JSON$ + ~"      ],"
        JSON$ + ~"      \"lang\":{"
        JSON$ + ~"         \"user_preferred_langs\":["
        JSON$ + ~"            \"EN\","
        JSON$ + ~"            \"PL\","
        JSON$ + ~"            \"NL\""
        JSON$ + ~"         ],"
        JSON$ + ~"         \"source_lang_user_selected\":\"" + FromLang$ + ~"\","
        JSON$ + ~"         \"target_lang\":\"" + ToLang$ + ~"\""
        JSON$ + ~"      },"
        JSON$ + ~"      \"priority\":-1"
        JSON$ + ~"   },"
        JSON$ + ~"   \"id\":15"
        JSON$ + ~"}"
        
        SendNetworkJSON("https://www.deepl.com/jsonrpc", JSON$, @Output$, @ErrorOutput$)
        If ParseJSON(1, Output$)
          CurrentJSON = JSONValue(1)
          CurrentJSON = GetJSONMember(CurrentJSON, "result")
          CurrentJSON = GetJSONMember(CurrentJSON, "translations")
          CurrentJSON = GetJSONElement(CurrentJSON, 0)
          CurrentJSON = GetJSONMember(CurrentJSON, "beams")
          CurrentJSON = GetJSONElement(CurrentJSON, 0)
          CurrentJSON = GetJSONMember(CurrentJSON, "postprocessed_sentence")
          Debug GetJSONString(CurrentJSON)
          
        EndIf
        
        CloseLibrary(PBEx_Network)
      EndIf
Systemvoraussetzungen:
  • Windows XP oder höher
  • .NET Framework 4 oder höher
  • Unicode-Aktivierung (standardmäßig ab PB 5.50)
Da das benötigte .NET Framework ab Windows 7 standardmäßig vorinstalliert ist und auf XP und Vista installiert werden kann, sollte das kein Problem sein, diese Version zu verwenden.
Es ist keine Assembly-Registrierung mit regasm.exe mit Administratorrechten notwendig wie bei COMatePLUS.

Lizenz: Diese DLL-Datei ist kostenlos und darf sowohl privat als auch kommerziell verwendet werden.
Folgende Copyright-Texte müssen mitgeliefert werden:
Copyright © 2019 RSBasic.de
Download: http://www.rsbasic.de/downloads/downloa ... etwork.zip
Bild

Ich würde mich über Feedbacks, Verbesserungsvorschläge, Fehlermeldungen oder Wünsche sehr freuen. Wer mich unterstützen möchte, kann mir auch was kleines spenden. Danke :)

Re: PB.Ex Network (Windows)

Verfasst: 03.03.2018 23:04
von Derren
:allright: :bounce: :bounce:

Geil! Danke :)

Re: PB.Ex Network (Windows)

Verfasst: 21.03.2018 12:00
von Joshua314
Hallo RSBasic,

leider schmiert bei mir die DLL 32 & 64 Bit ab
Beispiel: Json

Folgende Compiler Einstellungen
Bild

Bekomme immer dieses Ergebnis
Bild

System:
Bild

Kannst du bitte helfen ?

Gruß Thomas


WIN10

Re: PB.Ex Network (Windows)

Verfasst: 21.03.2018 12:34
von RSBasic
Vielleicht liegt es daran, dass bei dir kein .NET 3.5 installiert ist. Ich hatte demnächst eh vor, alle Bibliotheken auf 4.0 upzudaten.
Ich werde das aber noch separat auf einer frischen Instanz testen.

Re: PB.Ex Network (Windows)

Verfasst: 21.03.2018 12:50
von Joshua314
RSBasic hat geschrieben:Vielleicht liegt es daran, dass bei dir kein .NET 3.5 installiert ist. Ich hatte demnächst eh vor, alle Bibliotheken auf 4.0 upzudaten.
Ich werde das aber noch separat auf einer frischen Instanz testen.

Nein daran liegt es nicht.
Habe es aktiviert -- Rechner neu gestartet.. Immer noch das gleiche Ergebnis.

Leider....

Gruß Thomas

Re: PB.Ex Network (Windows)

Verfasst: 21.03.2018 13:23
von Kiffi
Joshua314 hat geschrieben:Bekomme immer dieses Ergebnis
Bild
... bekomme ich immer, wenn mein VirenScanner es zu gut mit mir meint. Vielleicht mal in die Richtung gucken?

Grüße ... Peter

Re: PB.Ex Network (Windows)

Verfasst: 21.03.2018 14:00
von Joshua314
Hallo Peter,

ist der von Winzigweich direkt (Fenster Defender) .... also nichts besonderes...
Den zum Test abgeschaltet .... trotzdem Sofort weg....

Gruß Thomas

Re: PB.Ex Network (Windows)

Verfasst: 21.03.2018 15:41
von Joshua314
Zwischen Frage:

In dem Beispiel kann man keine ID: mit eingeben ???
Wird diese nicht benötigt ???

Gruß Thomas

Re: PB.Ex Network (Windows)

Verfasst: 21.03.2018 15:47
von RSBasic
Nein, ID wird nicht benötigt, weil es keine anderen Funktionen gibt. Diese zwei Funktionen, die es in dieser Bibliothek gibt, sind eigenständige Funktionen.
Anders sieht es z.B. in PB.Ex SFTP-Lib aus, weil man da zuerst eine Verbindung mit OpenSFTP() herstellen muss, um danach beispielsweise eine Datei hochzuladen.

Re: PB.Ex Network (Windows)

Verfasst: 21.03.2018 15:52
von Joshua314
RSBasic hat geschrieben:Nein, ID wird nicht benötigt, weil es keine anderen Funktionen gibt. Diese zwei Funktionen, die es in dieser Bibliothek gibt, sind eigenständige Funktionen.
Anders sieht es z.B. in PB.Ex SFTP-Lib aus, weil man da zuerst eine Verbindung mit OpenSFTP() herstellen muss, um danach beispielsweise eine Datei hochzuladen.
Ich meinte die deepl ID ,nicht dass wir von verschiedenen sprechen.... (Sollte es gleich genauer schreiben)

Gruß Thomas