Schrift
[thread]8712[/thread]

Datei per https holen und speichern: Datei per https holen und speichern

Leser: 2


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
perl-anfaenger
 2007-02-01 16:47
#73931 #73931
User since
2007-01-22
7 Artikel
BenutzerIn
[default_avatar]
Hallo Community,

ich habe mal wieder eine Frage:

Ausgangslage 2 Server:

1. Server
Die benötigte Datei wird per FTP-Server bereitgestellt
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

use strict;
use Net::FTP;

my $benutzername = "xxxx";
my $passwort = "xxxx";
my $dateiname = "xxxx.dat";
my $server="xxxx";


my $ftp= Net::FTP->new($server);
$ftp->login($benutzername, $passwort);
$ftp->get($dateiname);
$ftp->quit();

print $dateiname;


Das klappt auch wunderbar

Nun aber mein Problemkind 2. Server:
Er ist von extern und hat (und wird auch nie ein bekommen lt. Adm) keinen FTP-Server

Er stellt mir die Datei per Link zur Verfügung:
https://server.doman.de/verzeichnis/status1.dat

wenn ich mit dem IE die Datei hole muss ich erst ein Zertifikat bestätigen und dann Name und Passwort eingeben. Danach kann ich die Datei speichern oder öffnen.

Die Umsetzung in Perl ist mir nicht gelungen.

Hat jemand sowas schon mal gemacht oder eine Idee wie man es programmieren kann.

MfG

Perl-Anfänger\n\n

<!--EDIT|renee|1170403704-->
sesth
 2007-02-01 17:37
#73932 #73932
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Im bin-Verzeichnis einer Perl-Installation (zumindestens unter Windows) liegt die Datei "lwp-rget". Damit sollte es gehen und Du kannst den Code auch als Muster für eine eigene Implementierung nehmen.
Gruß
Thomas
perl-anfaenger
 2007-02-06 14:27
#73933 #73933
User since
2007-01-22
7 Artikel
BenutzerIn
[default_avatar]
Vielen Dank für den Tipp

bin jetzt etwas weiter
--------------Code Anfang------------
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

use LWP;

my $url = 'http://xxx.xxx.de/xxxx/status1.dat';
my $ua = LWP::UserAgent->new();
my $form = $ua->get($url) or die "Kann $url nicht öffnen";

my $form_login = "xxxx";
my $form_pass = "xxxx";
my $resp = $ua->post("http://xxxx.xxxx.de/xxx/status1.dat",[ $form_login, $form_pass, action => login ]);

# $url = 'http://xxxx.xxxx.de/xxxx/status1.dat';
# $form = $ua->get($url) or die "Kann $url nicht öffnen";
# $form->is_success() or die $form->message();

print $form->content()

----------------Code Ende-----------------------

Leider bringt er mir folgende Ausgabe:

------------------Ausgabe:----------------------
Code: (dl )
1
2
401 Authorization Required
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.

---------------------------------------------------

Wenn ich es manuell mit dem Internetexplorer mache funktioniert es. Benutzer und Passwort sind auch korrekt.

Wo ist mein Fehler???

MfG

Perl Anfänger\n\n

<!--EDIT|renee|1170765134-->
renee
 2007-02-06 14:36
#73934 #73934
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wird da vielleicht noch etwas zusätzlich geschickt? Du solltest die abgesetzten Requests mal genauer betrachten (für Firefox würde es LiveHTTPHeaders geben, für IE weiß ich es nicht).

Oder wird da etwas in einem Cookie gespeichert? Dann musst Du ein Objekt von CPAN:HTTP::Cookies erzeugen und an den UserAgent "binden" (Stichwort: cookie_jar)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Stevee
 2007-02-06 16:05
#73935 #73935
User since
2006-10-17
5 Artikel
BenutzerIn
[default_avatar]
Muss für https nicht auch noch folgendes Modul geladen werden?
use Crypt::SSLeay;

Bei mir klapps folgendermaßen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl

use LWP::UserAgent;
use Crypt::SSLeay;

$ua = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => 'https://192.168.1.1/laber.html');
$req->authorization_basic('login-name', 'geheim123');
$result = $ua->request($req);

# check the outcome

if ($result->is_success)
{
$x = $result->decoded_content;
print $x;
}
else
{
print "Error: " . $result->status_line . "\n";
}
\n\n

<!--EDIT|Stevee|1170771790-->
nepos
 2007-02-06 16:44
#73936 #73936
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, sehe hier nirgends was betreffend HTTPS.
sesth
 2007-02-06 22:02
#73937 #73937
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Das Problem sind m.E. die fehlenden Autorisierungsdaten auf http-Ebene. Die sollten per
Code: (dl )
$ua->credentials( $netloc, $realm, $uname, $pass )
gesetzt werden. Im geposteten Code werden die Daten als Formular zurückgeschickt, das kommt aber nicht an der Autorisierung vorbei, deshalb der 401 (Server will über die Authentifizierung verhandeln, der Client kann aber nicht, da ihm die Credentials fehlen).
Gruß
Thomas
Stevee
 2007-02-07 08:35
#73938 #73938
User since
2006-10-17
5 Artikel
BenutzerIn
[default_avatar]
[quote=nepos,06.02.2007, 15:44]Hm, sehe hier nirgends was betreffend HTTPS.[/quote]

Aber "Perl-Anfaenger" schreibt doch folgendes:
Quote
Er stellt mir die Datei per Link zur Verfügung:
https://server.doman.de/verzeichnis/status1.dat

...wenn ich mit dem IE die Datei hole muss ich erst ein Zertifikat bestätigen.

Deshalb bin ich von einer https-Verbindung ausgegangen.\n\n

<!--EDIT|Stevee|1170830671-->
perl-anfaenger
 2007-02-07 09:27
#73939 #73939
User since
2007-01-22
7 Artikel
BenutzerIn
[default_avatar]
Hallo Stevee

Ja du hattest recht mein 1. Versuch war mit einer https-Verbindung.
Nur leider bin ich daran gescheitert durch zuviele Fehler und nicht installierte Packete gescheitert.
Also mein 2. Versuch per http (was mir ermöglicht wurde).
Da bin ich auch schon weiter gekommen - wir Ihr sehen konnten bin allerdings durch den Fehler 401 etwas ratlos gewesen.

Ich hätte darauf hinweisen müssen => Sorry vergessen

Ich werden heute den Vorschlag credentials ausprobieren und mich zurückmelden.

MfG

Perl-Anfaenger
perl-anfaenger
 2007-02-07 12:15
#73940 #73940
User since
2007-01-22
7 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen

ich habe es geschafft

hier der Code

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/local/bin/perl -w

use LWP;


$url = $ARGV[0] || "http://xxx.xxx.de/xxx/status1.dat";

$ua  = new LWP::UserAgent;
$req = new HTTP::Request 'GET' => "$url";

$req->authorization_basic('xxx' => 'xxx');

$res = $ua->request($req);

$result = $res->is_success() ?
   $res->content() :
   "Error: " . $res->code() . " " . $res->message();

print "$result\n";


Die Grundidee stammt von
Farid Hajji: Perl - Einführung, Anwendungen, Referenz

MfG

Gunnar Gillert

P.S.: Vielen Dank für die Hilfe

--- Modedit Gwendragon
Code-Tags repariert
---\n\n

<!--EDIT|GwenDragon|1170848554-->
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2007-02-01 16:47.