Diese Funktion ist Teil eines PHP-CLI-Skripts mit wxWidgets, das versucht, einige Felder an einen Apache2-Webserver in meinem LAN zu senden. Es schlägt immer "400 Bad Request" fehl und gibt den "/blog/update.php" Code nicht ein. Der Wert der Domäne/des Hosts, der ein kritischer Teil dieses Fehlers sein könnte, ist korrekt. Warum ist es eine schlechte Anfrage? Alle Fragen, die genau wie meine sind, haben keine Antworten."400 schlechte Anfrage" Warum?
<?php
[...]
function upload_button_clicked()
{ global $file_box, $frame, $html_box, $remote_host, $title_box, $upload_button ;
// collect global variables
$upload_button->Disable();
$file = $file_box->GetValue();
$title = $title_box->GetValue();
$html = $html_box->GetValue();
// open stream to server
$messages = "";
$server = fsockopen($remote_host, 80, $errno, $errstring, 5);
if(!$server)
{ $messages .= "Cannot connect to $remote_host: $errno $errstring\n";
goto end;
}
$messages .= "Connected to $remote_host\n";
stream_set_timeout($server, 5);
// urlencode parameters
$body = "date=" . urlencode(date('d m Y'))
."&file=" . urlencode($file)
."&title=" . urlencode($title)
."&html=" . urlencode($html) ;
$body_length = strlen($body) +1; for the "\n" to terminate
// build POST request
$request = "POST /blog/update.php HTTP/1.1\n"
."Host: $remote_host\n"
."Content-Type: application/x-www-form-urlencoded\n"
."Content-Length: $body_length\n"
."\n"
.$body."\n";
// fwrite request to stream
loop:
$request_length = strlen($request);
$bytes_written = fwrite($server, $request, $request_length);
if($bytes_written === false)
{ $messages .= "Writing POST to $remote_host failed";
goto end ;
}
// deal with partial write
if($bytes_written < $request_length) // not all written
{ $request = substr($request, $bytes_written);
goto loop;
}
$messages .= "sent $file OK\n";
// read responses to POST
while(!feof($server))
{ $response = fgets($server, 1024);
$messages .= "$response\n";
}
// tidy up
end:
$report = new wxMessageDialog($frame, $messages, "Upload", wxOK|wxCENTRE);
fclose($server);
$upload_button->Enable();
return ;
}
[...]
?>
Terminal-Ausgang:
Connected to mydomain.com
sent /home/.../blog/contents/201710090746+title.htm OK
HTTP/1.1 400 Bad Request
Date: Sun, 08 Oct 2017 21:46:08 GMT
Server: Apache
Content-Length: 285
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache Server at 127.0.0.1 Port 80</address>
</body></html>
Vielen Dank für das Auffinden. Ich habe oben im Code "+1" hinzugefügt, aber es wurde nicht behoben. – Palloy