Schrift
[thread]7[/thread]

Post-Daten an Server senden (Seite 2)

Leser: 3


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
SirLant
 2003-08-25 23:20
#6621 #6621
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Danke, werde ich mir mal ansehen, werde Morgen mit meinem Projekt anfangen, wofür ich das brauche :)
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
kmonster
 2003-08-25 23:28
#6622 #6622
User since
2003-08-20
33 Artikel
BenutzerIn
[default_avatar]
ich habe mir diese funktion geschrieben, die auch cookies behandelt, damit kann man sich auch bei anderen seiten einloggen wenn cookies gefordert sind.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use strict;
use LWP::UserAgent;
use HTTP::Response;
use HTTP::Request;
use URI::Escape;

sub formular_senden {
     my ($url, $formular, $cookie) = @_; 
     my $ua = new LWP::UserAgent;
     $ua->agent("Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); #manche webserver blocken sonst
     my $content;
     $content .= $_.'='.uri_escape($formular->{$_}).'&' for (keys(%$formular));
     chop($content);
     my $request = new HTTP::Request('POST', $url);   
     $request->header('Cookie' => $cookie) if $cookie;
     $request->content($content);
     my $response = $ua->request($request);
     die ($respnse->error_as_HTML) if $response->is_error();
     $cookie = $response->header('Set-Cookie');
     #print $response->as_string();
     return $response->content(), $cookie;
}
\n\n

<!--EDIT|kmonster|1061839811-->
SirLant
 2003-08-26 00:19
#6623 #6623
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Danke, die Seite verwendet(zum Glück) keine Cookies, sondern ne Session ID in der url.
Aber ich muss ebenfalls den User_Agent daken und deine zeile erspart mir die Arbeit, den selbst zu schreiben :)

Kannst du mir dieses Code-Segment erklären, dass Formular nen Anonymer Hash ist, ist klar, aber wozu das chop?
Code (perl): (dl )
1
2
3
my $content;
    $content .= $_.'='.uri_escape($formular->{$_}).'&' for (keys(%$formular));
    chop($content);
\n\n

<!--EDIT|SirLant|1061842818-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
jan
 2003-08-26 03:07
#6624 #6624
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
um das letzte & am ende wegzubekommen...
pq
 2003-08-26 03:23
#6625 #6625
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=SirLant,25.08.2003, 22:19]
Code (perl): (dl )
1
2
3
my $content;
    $content .= $_.'='.uri_escape($formular->{$_}).'&' for (keys(%$formular));
    chop($content);
[/quote]
hmm, das sieht mir fast aus wie java-code. string verlängern und
dann das letzte zeichen entfernen. in perl gibt es doch join()
und map():
Code (perl): (dl )
1
2
my $content = join "&",
    map { $_ . '=' . uri_escape($formular->{$_}) } keys %$formular;


Edit: nebenbei ist das verkehrt, da auch die
keys sonderzeichen enthalten können. lieber CGI.pm dafür verwenden.\n\n

<!--EDIT|pq|1061853919-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
kmonster
 2003-08-27 13:52
#6626 #6626
User since
2003-08-20
33 Artikel
BenutzerIn
[default_avatar]
Quote
Edit: nebenbei ist das verkehrt, da auch die
keys sonderzeichen enthalten können. lieber CGI.pm dafür verwenden.


das stimmt, aber da ich ja meine keys kenne und nur buchstaben und _ verwende habe ich das weggelassen. als universalfunktion muss das natürlich rein.
kmonster
 2003-08-27 15:31
#6627 #6627
User since
2003-08-20
33 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
1
2
my $content = join "&",
    map { $_ . '=' . uri_escape($formular->{$_}) } keys %$formular;


ok das ist natürlich wesenlich schöner.
habe mal ein wenig rumprobiert, folgende schreibweisen sind klar:
map (befehl, @liste);
map befehl, @liste;

dies ist mir aber unklar:
map {befehl} @liste;

normalerweise ist {irgendwas} doch eine hash referenz, wenn ich zum beispiel join so aufrufe:
join {irgendwas} @liste;
bekomme ich die liste mit hash_referenzen dazwischen. was ist bei map anders?
Dubu
 2003-08-28 18:30
#6628 #6628
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=kmonster,27.08.2003, 13:31]dies ist mir aber unklar:
map {befehl} @liste;
[/quote]
Siehe perldoc -f map:
[quote=perldoc,-f map]
      map BLOCK LIST
      map EXPR,LIST
         ....
[/quote]
{befehl} ist ein Block, wie auch hinter einem if() oder einem do.

Man beachte auch den Unterschied im Komma bei beiden Varianten oben.

Quote
normalerweise ist {irgendwas} doch eine hash referenz, wenn ich zum beispiel join so aufrufe:
join {irgendwas} @liste;
bekomme ich die liste mit hash_referenzen dazwischen.

Noe, du bekommst eine Fehlermeldung, weil ein Komma fehlt.
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2003-08-14 22:33.