Warum wird meine nicht Django-Website ein 404, wenn sie mit diesem URL-Parser überprüft?

stimmen
1

Hier ist eine einfache Python-Funktion, die überprüft, ob eine bestimmte URL gültig ist:

from httplib import HTTP
from urlparse import urlparse

def checkURL(url):
    p = urlparse(url)
    h = HTTP(p[1])
    h.putrequest('HEAD', p[2])
    h.endheaders()
    if h.getreply()[0] == 200:
        return 1
    else: return 0

Dies funktioniert für die meisten Websites, aber mit meiner Django-basierten Website , die ich bekomme sogar 200 - Statuscode , wenn ich eine URL eingeben , die eindeutig falsch ist. Wenn ich die gleiche Seite in einem Browser anzeigen, erhalte ich ein 404. Zum Beispiel die folgende Seite 404 in einem Browser gibt: http://wefoundland.com/GooseBumper

Aber gibt ein 200, wenn sie mit diesem Skript überprüft. Warum?

Bearbeiten : Während Mopoke Antwort die Frage von der Django - Seite der Dinge gelöst, es gab auch einen Fehler im Skript oben :

statt der URL-Analyse und dann mit

 h.putrequest('HEAD', p[2])

Ich braucht eigentlich die URL in der Anfrage zu verwenden, etwa so:

h.putrequest('HEAD', url)

dadurch gelöst, dass das Problem.

Veröffentlicht am 30/12/2009 um 02:22
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
0

Ihre Seite zurückkehrt nicht tatsächlich einen 404-Statuscode:

alex@alex-laptop:~$ curl -I http://wefoundland.com/GooseBumper
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 30 Dec 2009 01:37:41 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Beantwortet am 30/12/2009 um 02:38
quelle vom benutzer

stimmen
1

Obwohl der Inhalt 404 sagt, ist der Ort der Rückkehr 200 OK in dem Header:

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 30 Dec 2009 01:38:24 GMT
Content-Type: text/html; charset=utf-8
Connection: close

Stellen Sie sicher , dass Ihre Antwort verwendet HttpResponseNotFound. z.B:

    return HttpResponseNotFound('<h1>Page not found</h1>')
Beantwortet am 30/12/2009 um 02:40
quelle vom benutzer

stimmen
0

Um ein 404 durch Ihre Django Ansicht zurückgegeben werden, verwendet HttpResponseNotFound statt Httpresponse, oder Pass in ‚Status = 404‘ an den Httpresponse-Konstruktor.

Beantwortet am 30/12/2009 um 03:02
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more