Schrift
[thread]4303[/thread]

Mit IO::Socket datei herunterladen?: Weiß nicht wie..



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
ptk
 2005-06-04 17:36
#37676 #37676
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Siehe Antwort bei perl.de, Diskussion gerne hier weiter...
ptk
 2005-06-04 21:11
#37677 #37677
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Guck dir das Http-Modul an --- es verwendet nichtmal IO::Socket, sondern nur perl-Funktionen.
GloBoX
 2005-06-05 03:23
#37678 #37678
User since
2005-05-25
8 Artikel
BenutzerIn
[default_avatar]
Naja danke habs jetzt doch mit LWP::UserAgent; gemacht obwohl die exe wieder über 1mb groß geworden ist. Aber ich geb mich mal damit zu frieden
betterworld
 2005-06-05 13:27
#37679 #37679
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=GloBoX,04.06.2005, 15:06]Hat leider nicht funktioniert.[/quote]
Wieder dasselbe wie auf perl.de. Wenn Du nur sagst, dass es nicht funktioniert hat, koennen wir nicht viel weiter machen, als Dich zu trösten. Wenn Du aber einfach mal den Code zeigst, den Du geschrieben hast, dann koennen wir mit Dir gemeinsam herausfinden, warum er nicht funktioniert hat. Bitte gib etwas mehr Informationen.
Dubu
 2005-06-08 23:10
#37680 #37680
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=GloBoX,07.06.2005, 13:41]
Code: (dl )
$execf =~ s/chr(92)/chr(92)chr(92)/;
[/quote]
Diese Zeile macht garantiert nicht das, was du moechtest.
Strat
 2005-06-09 15:28
#37681 #37681
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Dubu,08.06.2005, 21:10][quote=GloBoX,07.06.2005, 13:41]
Code: (dl )
$execf =~ s/chr(92)/chr(92)chr(92)/;
[/quote]
Diese Zeile macht garantiert nicht das, was du moechtest.[/quote]
schaun wir mal:

(...) speichert das, was dazwischen steht, in $1, $2... ab
(92) speichert 92 in $1 ab, wenn es vorkommt

chr(92) speichert 92 in $1 ab, wenn die zeichenkette chr92 vorkommt, sonst findet es nichts

$execf =~ s/chr(92)/chr(92)chr(92)/;
ersetzt also das erste vorkommen der zeichenkette "chr92" in $execf durch die zeichenkette "chr(92)chr(92)"\n\n

<!--EDIT|Strat|1118316675-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
GloBoX
 2005-06-04 17:06
#37682 #37682
User since
2005-05-25
8 Artikel
BenutzerIn
[default_avatar]
Hi,

Ich versuch verzweifelt mit IO::Socket eine datei herunterzuladen (im http), doch ich bekomm es einfach nicht hin. Habe versucht den socket auf den Host zu öffnen dann mit "GET" die datei anzufordern und das was der Socket empfängt in eine datei zu speichern. Hat leider nicht funktioniert.

Nein, ich möchte nicht LWP benutzen Winken bitte mit IO::Socket
GloBoX
 2005-06-04 18:52
#37683 #37683
User since
2005-05-25
8 Artikel
BenutzerIn
[default_avatar]
Ich möchte halt gerne keine Module außer IO::Socket verwenden. Gibt es denn keine möglichkeit mit IO::Socket eine datei herunterzuladen?

Ich möchte LWP nicht benutzen, weil ich Programm später mit perl2exe compilieren möchte und das Programm dann riesengroß wird durch LWP.\n\n

<!--EDIT|GloBoX|1117897748-->
esskar
 2005-06-04 22:39
#37684 #37684
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/perl

# Copyright 2005 Sascha Kiefer
# This library is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.

use strict;
use warnings;

use IO::Socket::INET ();
use URI ();
use HTTP::Request ();
use HTTP::Response ();

sub max {
return $_[0] > $_[1] ? $_[0] : $_[1];
}

unless(@ARGV) {
print "Usage: miniget <url>...\n";
exit 0;
}

my $url = URI->new($ARGV[0]);

unless(defined $url->scheme and lc($url->scheme) eq 'http') {
print STDERR "Error: Url must start with http://.\n";
exit 1;
}

my $host = $url->host;
my $port = $url->port || $url->default_port;

print "Try to connect to $host:$port ...\n";

my $sock = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => "http($port)",
Proto => 'tcp'
);

unless($sock) {
print STDERR "Error: Unable to connect to server.\n";
exit 1;
}


# Sending request
my $request = HTTP::Request->new();

$request->method('GET');
$request->uri($url->path || '/');
$request->protocol('HTTP/1.0');

$request->header('User-Agent' => 'miniget/0.01');
$request->header('Connection' => 'close');
$request->header('Host' => $host);

print "Sending request ...\n\n";
print $request->as_string;
$sock->print($request->as_string);



# Reading response
my $response = HTTP::Response->new();

my $line = $sock->getline;
unless($line =~ m!^(HTTP/\d.\d) (\d+) (.*)\r?\n$!) {
print STDERR "Error: Response not understandable.\n";
exit 1;
}

$response->protocol($1);
$response->code($2);
$response->message($3);

$line = $sock->getline;
$line =~ s!\r?\n$!!g;
while($line) {
my ($key, $val) = split /:\s/, $line;

$response->header($key => $val);

$line = $sock->getline;
$line =~ s!\r?\n$!!g;
}

my $contentlen = $response->header('Content-Length') || 0;

my $bufdata;
my $buflen = 0;

my $len;
while($len = $sock->read($bufdata, max(1024, $contentlen), $buflen)) {
$buflen += $len;
last if $contentlen and $buflen >= $contentlen;
}
print "Received response ...\n\n";
$response->content($bufdata);

print $response->as_string;
pKai
 2005-06-05 04:01
#37685 #37685
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Ich kann mich täuschen, aber LWP ist doch auch purePerl, dementsprechend müssen keine DLLs in das EXE-Paket aufgenommen werden.
Kompilier doch mal ein print "Hello, world!";. Das dürfte doch kaum kleiner im Ergebnis ausfallen!?
Der Perl-Interpreter, der Teil so einer EXE wird, ist nunmal nicht gerade winzig.
I sense a soul in search of answers.
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2005-06-04 17:36.