Seite 1 von 1

Perl==>PB

Verfasst: 20.10.2006 18:27
von vonTurnundTaxis
Ich habe hier ein kleines Perl-Skript, das ich aber lieber als PB-Code hätte, da ich von Perl wirklich überhaupt keine Ahnung habe.
Es wäre nett, wenn ihr mit beim Übersetzen helfen könntet:

Code: Alles auswählen

use strict; 
 use LWP::UserAgent; 
 use HTTP::Request; 
 use HTTP::Headers; 
 my $objUserAgent = LWP::UserAgent->new; 
 my $objHeader = HTTP::Headers->new; 
 $objHeader->push_header('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' => '391'); 
 $objHeader->push_header('XXXXXXXXXXXXXXXXXXX' => 'xxxxxxx'); 
 $objHeader->push_header('XXXXXXXXXXXXXXXXXXX' => 'xxxxxxxxxxx'); 
 $objHeader->push_header('XXXXXXXXXXXXXXXXXXXX' => 'xxxxxxxxxxxx'); 
 $objHeader->push_header('XXXXXXXXXXXXXXXXXXXX' => 'xxxxxxxxxxxxxxxxxxx'); 
 $objHeader->push_header('XXXXXXXXXXXXXXXXX' => '0'); 
 $objHeader->push_header('Content-Type' => 'text/xml'); 
 my $request = "<?xml version='1.0' encoding='utf-8'?> 
                <XXXXXXXXXXXXXXXXXXXXXXXXXX xmlns=\""; 
 my $objRequest = HTTP::Request->new("POST", 'https://someurl/some.dll', 
 $objHeader, $request); 
 my $objResponse = $objUserAgent->request($objRequest); 
 if (!$objResponse->is_error) 
 { 
     print $objResponse->content; 
 } 
 else 
 { 
     print $objResponse->error_as_HTML; 
 } 
(Ich musste leider aus Uhrheberrechtsgründen einiges "wegixen" und hoffe, dass es trotzdem funktioniert)

Verfasst: 20.10.2006 21:30
von edel
DD hatte letztens noch was gepostet, einfach mal nach HTTP und /oder
POST suchen.

Verfasst: 21.10.2006 11:36
von vonTurnundTaxis
Danke, aber das Beispiel von DD erzeigt bei mir nur einen Fehler ("specified address is nul").
Und so wie mir das scheint, hat das auch etwas mit SSL zu tun.

Verfasst: 21.10.2006 14:40
von AND51
Also bei der Push-Header-Kacke kann ich dir schon mal helfen:

Wenn da steht

Code: Alles auswählen

push_header('abc' => 'xyz');
wird im HTTP-Response (oder -Request) folgendes:

Code: Alles auswählen

abc: xyz
Anhand des Content-Type und des text/xml kann ich das eindeutig identifizieren.

Vermutlich willst du eine XML Datei weitergeben bzw. es handelt sich hier um eine XML Datei eines Programms, welches seine Einstellungen gern in XML speichert... :wink:

Verfasst: 21.10.2006 14:48
von vonTurnundTaxis
$objHeader ist also eine Stringvariable, die nach diesem Beispiel:

Code: Alles auswählen

$objHeader->push_header('abc' => '123'); 
$objHeader->push_header('def' => '456'); 
$objHeader->push_header('ghi' => '789'); 
mit

Code: Alles auswählen

objHeader.s = "abc: 123" + Chr(10) + "def: 456"+ Chr(10) + "ghi: 789"
Identisch wäre?

Verfasst: 21.10.2006 15:13
von AND51
Ja, nur, dass statt Chr(10) entweder Chr(10)+Chr(13) oder #CRLF$ eingesetzt wird. Unter Windows werden zeilenumbrüche generell mit beiden Zeichen markiert.

Verfasst: 22.10.2006 12:25
von KeyPusher
@vonTurnundTaxis: muss das denn zwingend https also ssl sein? normales http reicht nicht? für windows hätt ich eine lösung per winapi - hab mich gestern da mal durchgewühlt. wenn ich das aber richtig seh, bist du per linux unterwegs, oder?

Verfasst: 30.10.2006 01:21
von KeyPusher
wenn es denn wirklich per https sein muss gibt es noch 'OpenSSL' als möglichkeit. das gibt es für Linux und könnte/sollte schon bei etlichen distrubs dabei sein - und das gibt es auch für Win32.

vielleicht ist es ja gar nicht mehr von interesse, aber es könnte dem einen oder anderen noch als anregung oder beispiel dienen.

für windows gibt es eine binary-version bei http://www.slproweb.com/products/Win32OpenSSL.html. aber letztendlich wird für https nur die "libssl32.dll" benötigt. allerdings weiss ich nicht, wie die bei der linux version heisst. nach linux hab mich jetzt als win-anwender nicht umgesehen, aber bestimmt findet man auf der offiziellen seite von OpenSSL mehr dazu.

in der https.zip hab ich mal zwei beispiele (purebasic 4.0) für https per Win-API und per OpenSSL gepackt. bei beiden versionen lassen sich leicht weitere headerzeilen und post-daten einfügen/anhängen, was ja zum teil thema dieses threads war/ist.

die GetSite() procedure kann sowohl http wie auch https - klar. allerdings hab ich nur die möglichkeit eingebaut den response des webserver als datei abzuspeichern, was aber leicht zu ändern ist, wenn man den response lieber gleich im speicher hätte.

zu beachten ist noch, das bei GetSite() per Win-API keine header-infos mit abgespeichert werden, bei der OpenSSL version schon.

ps: ob wohl das mir alles klappte, haben meine progrämmchen reinen experimentier status.

Verfasst: 30.10.2006 11:38
von vonTurnundTaxis
Erstmal Enschuldigung, dass ich nicht auf deinen Beitrag vom 22. geantortet habe - den muss ich wohl übersehen haben :oops:
Leider funktioniert dein Beispielcode nicht unter Linux (natürlich mit dem richtigen DLL-Pendant).
Da es bei den DLL-Aufrufen IMAs gibt, schätze ich, dass hier noch ein PB-Bug vorliegt.
Trotzdem danke für deine Hilfe; vielleicht ist das Problem ja in einer zukünftigen PB-Version behoben.