Schrift
[thread]4346[/thread]

HTTP POST funktioniert nicht ....



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
renee
 2004-06-08 00:42
#38110 #38110
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Poste doch mal etwas Code...
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/
Discipulus
 2004-06-08 12:35
#38111 #38111
User since
2003-11-25
19 Artikel
BenutzerIn
[default_avatar]
Nein, ich benutze IO::Socket. Mit LWP habe ich auch schon erfahrungen gemacht, würde es aber lieber mit IO::Socket machen. Ich finde es so interessanter...

Zum Code: Ich habe die URL abändern müssen, da mein Passwort in der URL verschlüsselt ist ... Der Code sieht etwa so aus:
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
#!/usr/bin/perl

use IO::Socket;

$host="irgendeine.url";
$port=80;

print "Create Socket .... ";

socket(SOCKET,PF_INET,SOCK_STREAM,getprotobyname('tcp')) or die "Socket: $!\n";
$addr=sockaddr_in($port,inet_aton($host));
connect(SOCKET,$addr) or die "Connection: $!\n";

if($proxy) {
@site=&getpage("GET http://www.url.com HTTP/1.0\n\n");
}
else {
@site=&getpage("GET / HTTP/1.0\nHost:www.url.com\n\n");
}

foreach $temp (@site) {
if($temp=~m{irgenein Test}) {
push(@temp,$1);
print "$1\n";
}
}

#bis hier Funktioniert es ohne Probleme

$send="POST /irgendein.Script HTTP/1.0\r\nHost: www.url.com\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040413 Debian/1.6-5\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1\r\nAccept-Language: de-ch\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\nReferer: http://www.url.com/irgeindein.script\r\n";
$send2="Content-Type: application/x-www-form-urlencoded\nContent-Length: 69\r\n\nDaten die gesendet werden";

&getpage("$send");
@after=&getpage("$send2");

#in ethereal sieht der gesendete Befehl genau gleich aus wie der von Mozilla aus
#Aber ich erhalte kein HTTP/1.0 200 OK
foreach (@after) {
print "$_\n";
}


close (SOCKET);

sub getpage {
send(SOCKET,"$_[0]",0) or die "Send: $!\n";

@ans="";

do {
$data="";
recv(SOCKET,$data,1024,0);
print "Receiving data ...\n";
push (@ans,$data);
} while($data ne "");

return (@ans);
}
Discipulus
 2004-06-08 22:56
#38112 #38112
User since
2003-11-25
19 Artikel
BenutzerIn
[default_avatar]
Das die \r nicht viel bringen dachte ich mir schon, aber ich wollte es einfach genau so machen wie mozilla es sendet.

Ich würde es aber trotzdem gerne mit IO::Socket probieren ... im Notfall nehme ich dann halt LWP aber ich finde es interessant wenn man die Anfrage von Grund auf selber schreibt.
esskar
 2004-06-09 00:09
#38113 #38113
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
klar sendet mozilla und co. \r\n jedoch wandelt perl zum beispiel auf einem windows system \n nach \r\n um...

wenn du sicher gehen willst, dann sende "\x0d\x0a"
Discipulus
 2004-06-09 23:07
#38114 #38114
User since
2003-11-25
19 Artikel
BenutzerIn
[default_avatar]
Genial .. endlich hat es funktioniert!! ;)

Eine andere Frage: Wie findet ihr meine recv-routine? Überflüssig oder muss man das so machen? Und wie kann ich machen, dass wenn ich etwas sende aber keine Antwort erwarte, dass der Script nicht wartet bis er etwas erhält? Gibt es eine Möglichkeit ein Timeout für recv zu setzen?

THX
Discipulus
 2004-06-08 00:12
#38115 #38115
User since
2003-11-25
19 Artikel
BenutzerIn
[default_avatar]
Es ist zum verzweifeln! Ich sitze schon einige Abende am Laptop und bringe mein Script einfach nicht zum laufen!
Es geht darum, dass ich ein Script schreibe, der mir einige Dinge im Web automatisiert. Ich führe zuerst ein GET aus um die Page zu erhalten. Dann werden gewisse Daten verarbeitet und dann ein entsprechender POST geschickt. Und genau hier liegt das Problem. Der POST funktioniert nicht! Keine Ahnung warum. Ich habe mit ethereal gesnifft, was Mozilla sendet und genau das auch gesendet. Nur ich erhalte kein HTTP/1.1 200 OK ...

Hat jemand einen Tipp zu POST-Messages?
Dubu
 2004-06-08 02:21
#38116 #38116
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Du nimmst doch LWP::UserAgent, oder?
esskar
 2004-06-08 22:38
#38117 #38117
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
* die \r haben nix zu suchen...
* nimm LWP::* oder schau dir die rfc's zu dem thema an und versuch es richtig zu machen! Aber LWP ist echt gesünder...
format_c
 2004-06-08 22:59
#38118 #38118
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=Discipulus,08.06.2004, 20:56]... aber ich finde es interessant wenn man die Anfrage von Grund auf selber schreibt.[/quote]
Du meinst das Rad neu erfindet?! Oder ;) SCNR

Gruß Alex
Oesi50
 2004-06-09 01:41
#38119 #38119
User since
2004-05-15
33 Artikel
BenutzerIn
[default_avatar]
hi Discipulus,

Du musst für GET und POST getrennte Connections benutzen.
so:

socket-->connect-->GET-->close
socket-->connect-->POST-->close

oder mit keep-alive und reuse arbeiten.

btw: die Content-Length sollte auch stimmen!
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2004-06-08 00:42.