PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bilder download endet mit 400 Bad Request


freeze
20.11.2004, 12:23
Hey @all,

und zwar wollte ich mir ein bild herunterladen mit einem Perlscript, jedoch bekomme ich immer folgenden quelltext zurück:
<HTML>
<HEAD><TITLE>400 Bad Request</TITLE></HEAD>
<BODY BGCOLOR="#cc9999" TEXT="#000000" LINK="#2020ff" VLINK="#4040cc">
<H2>400 Bad Request</H2>
Your request has bad syntax or is inherently impossible to satisfy.
<HR>
<ADDRESS><A HREF="http://www.acme.com/software/thttpd/">thttpd/2.25b 29dec2003</A></ADDRESS>
</BODY>
</HTML>

ich sende folgenden String:
GET http://images.ucomics.com/comics/ga/2004/ga041120.gif HTTP/1.0\n\n

Kann mir diesbezüglich jemand helfen, den wenn ich die URL im Browser eingebe, dann sehe ich das bild. Normalerweise bekomme ich auch das bild wenn ich zum beispiel folgendes verwende:
GET http://www.google.de/intl/de_de/images/logo.gif HTTP/1.0\n\n

Lg freeze

P.S.: wie man sieht ist es ein thttpd Server, hat der irgendwelche sicherheitseinrichtungen die das verhindern? Wenn ja, warum zeigt es dann der Browser an?


Tribal
20.11.2004, 12:32
Liegt daran, das ein HTTP Get nicht nur aus dem GET bestehen sollte.
http://www.w3.org/Protocols/

Dort findest du, das Protokoll vom HTTP GET.

butterkeks
20.11.2004, 13:00
lass das "http://" und die Domain weg.

Wenn du 404 Fehler bekommen solltest, dann verwende HTTP/1.1, da die vlt. vserver verwendet haben udn diese bei 1.0 net unterstützt werden.

Was hat das mit Perl zu tun?

freeze
20.11.2004, 13:26
lass das "http://" und die Domain weg.

Wenn du 404 Fehler bekommen solltest, dann verwende HTTP/1.1, da die vlt. vserver verwendet haben udn diese bei 1.0 net unterstützt werden.

Was hat das mit Perl zu tun?
Ja, ich habe es auch schon mit HTTP/1.1 probiert jedoch auch ohne erfolg

Lg freeze

freeze
20.11.2004, 13:28
Liegt daran, das ein HTTP Get nicht nur aus dem GET bestehen sollte.
http://www.w3.org/Protocols/

Dort findest du, das Protokoll vom HTTP GET.
Meine Anweisung besteht ja auch nicht aus nur einem GET, sondern aus einem GET, einer Adresse und dem Protokoll. Oder habe ich das etwas mißverstanden?

Lg freeze

butterkeks
20.11.2004, 13:46
lass das Protokoll und die domain doch einmal weg, wie oben erwähnt!
Die brauchste eigentlich nur, wenn du mit Proxy Servern arbeitest

freeze
20.11.2004, 14:10
lass das Protokoll und die domain doch einmal weg, wie oben erwähnt!
Die brauchste eigentlich nur, wenn du mit Proxy Servern arbeitest
Also ich habe mich jetzt zum Serevr "images.ucomics.com" verbunden, und folgende GET Anweisung abgesetzt:
1.GET http://images.ucomics.com/comics/ga/2004/ga041120.gif HTTP/1.0\n\n
2.GET http://images.ucomics.com/comics/ga/2004/ga041120.gif HTTP/1.1\n\n
3.GET comics/ga/2004/ga041120.gif HTTP/1.0\n\n
4.GET comics/ga/2004/ga041120.gif HTTP/1.1\n\n
5.GET /comics/ga/2004/ga041120.gif HTTP/1.0\n\n
6.GET /comics/ga/2004/ga041120.gif HTTP/1.1\n\n

Keines der Beispiele funktioniert :(
Ich bekomme immer diese Fehlermeldung:
HTTP/1.0 400 Bad Request
Server: thttpd/2.25b 29dec2003
Content-Type: text/html; charset=iso-8859-1
Date: Sat, 20 Nov 2004 13:04:47 GMT
Last-Modified: Sat, 20 Nov 2004 13:04:47 GMT
Accept-Ranges: bytes
Connection: close
Cache-Control: no-cache,no-store

<HTML>
<HEAD><TITLE>400 Bad Request</TITLE></HEAD>
<BODY BGCOLOR="#cc9999" TEXT="#000000" LINK="#2020ff" VLINK="#4040cc">
<H2>400 Bad Request</H2>
Your request has bad syntax or is inherently impossible to satisfy.
<HR>
<ADDRESS><A HREF="http://www.acme.com/software/thttpd/">thttpd/2.25b 29dec2003</A></ADDRESS>
</BODY>
</HTML>


Kann man den Webserver irgendwie abfragen, was er haben möchte HTTP/1.0 oder HTTP/1.1, oder sontiges ?
Lg freeze

butterkeks
20.11.2004, 16:13
folgender Request geht bei mir:

GET /comics/ga/2004/ga041120.gif HTTP/1.1\n
Host: images.ucomics.com\n
\n


du kannst kein HTTP/1.0 verwenden, weil die vhosts für die Subdomain benutzen (wie ich anfangs vermutet hatte).
Weiterhin waren deine HTTP/1.1 Requests "bad", weil du das Host-Feld im Header nciht mit angegeben hast (ist mir eben erst wieder eingefallen, dass man das immer mit angeben muss, bei HTTP/1.1)

Man kann mit Trial and Error schauen, ob der Server HTTP/1.1 unterstützt; meckert er? Dann nein.