PB.Ex Network (Windows)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

PB.Ex Network (Windows)

Beitrag 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 :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: PB.Ex Network (Windows)

Beitrag von Derren »

:allright: :bounce: :bounce:

Geil! Danke :)
Signatur und so
Joshua314
Beiträge: 115
Registriert: 06.04.2005 22:44

Re: PB.Ex Network (Windows)

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PB.Ex Network (Windows)

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Joshua314
Beiträge: 115
Registriert: 06.04.2005 22:44

Re: PB.Ex Network (Windows)

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PB.Ex Network (Windows)

Beitrag 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
Hygge
Joshua314
Beiträge: 115
Registriert: 06.04.2005 22:44

Re: PB.Ex Network (Windows)

Beitrag von Joshua314 »

Hallo Peter,

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

Gruß Thomas
Joshua314
Beiträge: 115
Registriert: 06.04.2005 22:44

Re: PB.Ex Network (Windows)

Beitrag von Joshua314 »

Zwischen Frage:

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

Gruß Thomas
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PB.Ex Network (Windows)

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Joshua314
Beiträge: 115
Registriert: 06.04.2005 22:44

Re: PB.Ex Network (Windows)

Beitrag 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
Antworten