Bad Request | localhost-URL

Irgendwelche Probleme mit XAMPP für Linux? Dann ist hier genau der richtige Ort um nachzufragen.

Bad Request | localhost-URL

Postby Dream-Teacher » 26. April 2021 21:09

Liebe Experten,

ich habe folgendes Problem:

URL funktioniert im Browser (API-Schnittstelle von Moodle):
http://localhost/moodle/webservice/rest/server.php?wstoken=MyToken&wsfunction=core_course_create_courses&moodlewsrestformat=json&courses[0][fullname]=%27EDV_M%C3%BCller%27&courses[0][shortname]%20=%27EDV_M%C3%BCller%27&courses[0][categoryid]%20=1

Nun rufe ich die gleiche URL über PHP auf:

$ch = curl_init();
// setze die URL und andere Optionen
curl_setopt($ch, CURLOPT_URL, "http://localhost/moodle/webservice/rest/server.php?wstoken=MyToken&wsfunction=core_course_create_courses&moodlewsrestformat=json&courses[0][fullname]='EDV_Müller'&courses[0][shortname] ='EDV_Müller'&courses[0][categoryid] =1");

curl_setopt($ch, CURLOPT_HEADER, 0);

// führe die Aktion aus und gib die Daten an den Browser weiter
curl_exec($ch);

// schließe den cURL-Handle und gib die Systemresourcen frei
curl_close($ch);

Nach Ablauf des Skripts erhalte ich folgende Fehlermeldung:
Bad Request
Your browser sent a request that this server could not understand.

Apache/2.4.46 (Ubuntu) Server at localhost Port 80


Was muss ich im Code verändern oder bei Apache2 verändern?

Ich nutze Ubuntu 20.04

Vielen Dank für Eure Hilfe :-)
Dream-Teacher
 
Posts: 3
Joined: 13. April 2021 17:52
XAMPP version: 12
Operating System: Ubuntu

Re: Bad Request | localhost-URL

Postby Nobbie » 27. April 2021 12:23

An Apache musst Du nichts verändern, die URL ist Käse. Da sind Leerstellen drin, die da nicht sein dürfen und zwar an 2 Stellen vor einem Gleichheitszeichen '=', ich habe die Stellen mal rot markiert:

"http://localhost/moodle/webservice/rest/server.php?wstoken=MyToken&wsfunction=core_course_create_courses&moodlewsrestformat=json&courses[0][fullname]='EDV_Müller'&courses[0][shortname] ='EDV_Müller'&courses[0][categoryid] =1"

Das ist fehlerhafter Syntax, mache die Leerstellen dort weg. Richtig sieht es dann so aus:

"http://localhost/moodle/webservice/rest/server.php?wstoken=MyToken&wsfunction=core_course_create_courses&moodlewsrestformat=json&courses[0][fullname]='EDV_Müller'&courses[0][shortname]='EDV_Müller'&courses[0][categoryid]=1"

Wenn die fehlerhafte URL via Browser eingegeben wird, dann werden die Stellen "maskiert" (das macht der Browser), d.h. in hexadezimalen Code umgeändert (das ist das %20 in der URL). Aber in Curl hast Du da echte Leerstellen hingeschrieben, das ist ein Fehler. Ich würde die Leerstellen wegmachen, wenn Moodle danach nicht das tut, was es soll, musst Du die maskierte URL von oben übernehmen. Es gibt auch in PHP Funktionen, die eine URL entsprechend "escapen", irgendwie urlescape() oder so, weiß ich jetzt nicht auswendig. Habe mal kurz gegoogelt, hier ist die Doku (urlencode()): https://www.php.net/manual/de/function.urlencode.php
Nobbie
 
Posts: 13165
Joined: 09. March 2008 13:04

Re: Bad Request | localhost-URL

Postby Dream-Teacher » 27. April 2021 18:58

Du bist einfach Spitze... vielen herzlichen Dank!!!

Die Lösung ist folgende PHP-Funktion: rawurlencode
Dream-Teacher
 
Posts: 3
Joined: 13. April 2021 17:52
XAMPP version: 12
Operating System: Ubuntu

Re: Bad Request | localhost-URL

Postby Nobbie » 28. April 2021 15:00

Dream-Teacher wrote:Du bist einfach Spitze...


Endlich mal einer mit Durchblick .... ;-)

Dream-Teacher wrote:Die Lösung ist folgende PHP-Funktion: rawurlencode


Dachte ich mir, weil das Leezeichen da mit %20 codiert wird, in der alten urlencode() Funktion wird es noch mit "+" codiert.
Nobbie
 
Posts: 13165
Joined: 09. March 2008 13:04


Return to XAMPP für Linux

Who is online

Users browsing this forum: No registered users and 63 guests