Können Sie nicht einige Hinweise darüber, was genau das geben, übergeben sind die Fehler in CS50 Check server1 und einige Hinweise darauf hingewiesen, wie sie lösen:CS50 pset6 Server Parse-Funktion - CS50-Server 1 check
meine Parse-Funktion wie folgt aussieht :
bool parse(const char* line, char* abs_path, char* query)
{
// create copy of line
char linecopy[strlen(line)+1];
strcpy(linecopy, line);
linecopy[strlen(line)] = '\0';
int spaces = 0;
for (int i = 0, lenght = strlen(line); i < lenght; i++)
{
if (line[i] == ' ')
spaces++;
if (spaces > 2)
{
error(400);
return false;
}
}
char* methodcopy;
char* targetcopy;
char* httpcopy;
// extract method, request-target, and http version to tokens
methodcopy = strtok(linecopy, " ");
targetcopy = strtok(NULL, " ");
httpcopy = strtok(NULL, "\r\n");
//copy tokens into method, target and http
char method[strlen(methodcopy) + 1];
strcpy (method, methodcopy);
char target[strlen(targetcopy) + 1];
strcpy(target, targetcopy);
char http[strlen(httpcopy) + 1];
strcpy(http, httpcopy);
// add null terminators
method[strlen(method)] = '\0';
target[strlen(target)] = '\0';
http[strlen(http)] = '\0';
// ensure method is GET
if(strncmp(method, "GET", 4)!= 0)
{
error(405);
}
// ensure request-target begins with "/"
if(strchr(target, '/') == NULL)
{
error(501);
}
// ensure request-target does not contain '"'
if (strchr(target, '"') != NULL)
{
error(400);
}
// ensure HTTP version is 1.1
if(strcmp(http, "HTTP/1.1") != 0)
{
error(505);
}
// extract query from request-target
char* abs_pathcopy;
char* querycopy;
abs_pathcopy = strtok(target, "?");
querycopy = strtok(NULL, "\0");
//if query isn't null, copy to query
if (querycopy != NULL)
{
strcpy(abs_path, abs_pathcopy);
strcpy(query, querycopy);
abs_path[strlen(abs_pathcopy)] = '\0';
query[strlen(querycopy)] = '\0';
}
//if query is null, set query to null
else
{
strcpy(abs_path, abs_pathcopy);
abs_path[strlen(abs_pathcopy)] = '\0';
query[0] = '\0';
}
// ensure absolute path does not contain "?"
if(strchr(abs_path, '?') != NULL)
{
error(400);
}
// ensure query does not contain '"'
if(strchr(abs_path, '"') != NULL)
{
error(400);
}
return true;
}
Wenn ich das CS50-Check-Server 1, habe ich die folgenden Fehler angezeigt:
:(Anfrage Ziel von abc/hello.php Fehlercode 501 \ erwartete Ausgabe zurückgibt, aber nicht "HTTP/1.1 404 nicht gefunden \ r \ nInhaltstyp: ...“
:(cat.exe Anforderung gibt Fehlercode 501 \ erwartete Ausgabe, kein Exit-Code von 0
:(Zwei Leerzeichen nach GET kehrt Fehlercode \ erwartete Ausgabe, kein Ausgang Code von 0
nach meinem Verständnis ist die Anforderungsleitung nicht gemäß der Definition:
Methode SP Anfrage-Ziel SP HTTP-Version CRLF
aber nicht sicher, wie es zu definieren ... .
Alle Tipps und Hinweise sind willkommen! Ich will keine Lösung, aber nur ein paar Hinweise;)
Danke an alle, die sich die Zeit genommen haben, diese lange Frage zu lesen!
@ t.m. - Vielen Dank!Ich folgte Ihrem Rat und bearbeitete meinen Code am Anfang und prüfte die Anzahl der Leerzeichen in der Anforderungszeile und dies löste einen der Fehler (:(Zwei Leerzeichen nach GET gibt den Fehlercode \ erwartete Ausgabe zurück, nicht einen Beendigungscode von 0) Ich habe immer noch die anderen zwei Fehler und außerdem bin ich bei dem Versuch fest, eine Lösung zu finden, wie die Korrektheit der Anforderungsleitung per Definition zu bestimmen ist: Methode SP Ziel SP http \ r \ n ..... – SnezhinaT
auch, ich nicht verstehe die Bedeutung der angegebenen Fehler: :(request-target von abc/hello.php gibt den Fehlercode 501 \ expected output zurück, aber nicht "HTTP/1.1 404 Not Found \ r \ nContent-Type: ..." : (Request cat.exe liefert Fehlercode 501 \ erwartete Ausgabe, nicht ein Exit-Code von 0 die Lösung, die Sie anbieten - mit strchr das Delimeter zu erkennen - nicht sicher, wie Sie es implementieren. Im Allgemeinen denke ich, dass ich lösen kann, wenn ich verstehe, was Fehler bedeuten .... – SnezhinaT
Diese Fehler sind in einer seltsamen Syntax geschrieben :). Ich schätze :(request-target von abc/hello.php gibt den Fehlercode 501 \ expected output zurück, aber nicht "HTTP/1.1 404 Not Found \ r \ nContent-Type: ..." bedeutet Ausgabe für "request-target of abc /hello.php "sollte der Fehlercode 501 sein, aber Ihre Ausgabe war" HTTP/1.1 404 Nicht gefunden \ r \ nContent-Type: ... " –