HTTP HTTPRequest mit Anführungszeichen in der URL

Thallius

Thallius

Top Contributor
Hi,

ich habe mal wieder ein anscheinend Java typisches Problem wo ich nicht weiter komme.

Ich muss folgenden Request an eine API absetzen:
Java:
String url = "xxx.com/data/v2/libraryEntries?pageSize=1000&filter={\"lastUpdatedDate\":{\"gte:\""+lastUpdate+"\"}}";

fragt mich bitte nicht welcher kranke Kopf auf die Idee gekommen ist einen JSON string als GET Parameter zu erwarten statt daraus einen ordentlichen POST Request zu machen. Ich kann es nicht ändern.

Mein Code wie ich den Request mache sieht folgendermassen aus:

Java:
try
        {
            URL obj = new URL("https:" +
                    "//" + apiURL + params);

            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            if (con instanceof HttpsURLConnection)
            {
                if(!quiet) Logger.log("HTTPS Send "+cmd+": https://" + apiURL + params);
                ((HttpsURLConnection) con)
                        .setHostnameVerifier(new GEHostNameVerifier());
            }

            // optional default is GET
            con.setRequestMethod(cmd);
            con.setRequestProperty("Authorization", token.type + " " + token.token);
            con.setRequestProperty("User-Agent", "PostmanRuntime/7.3.0");
            con.setRequestProperty("Accept", "*/*");
            con.setRequestProperty("Host", apiURL);
            con.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
            con.setRequestProperty("Connection", "keep-alive");

            String responseCode = ""+con.getResponseCode();
            if (responseCode.charAt(0) != '2')
            {
                System.out.println(con.getResponseMessage());
                if(!quiet) Logger.log("GET-Request Errorcode: " + responseCode);
                return null;
            }
            return getResponse(con);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

Das führt nun aber zu einem Bad Request. Ohne den filter parameter läuft es einwandfrei. Schicke ich den Request über Postman funktioniert es auch problemlos.

Ich habe schon versucht die URL vorher zu encode aber das klappt auch nicht. Ich habe auch versucht nur die " durch %22 zu ersetzen. Ebenfalls keine Änderung.

Was kann ich noch tun?

Gruß

Claus
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
fragt mich bitte nicht welcher kranke Kopf auf die Idee gekommen ist einen JSON string als GET Parameter zu erwarten statt daraus einen ordentlichen POST Request zu machen. Ich kann es nicht ändern.
Vermutlich jemand, der die semantischen Unterschiede zwischen GET und POST kennt? :)
 
Thallius

Thallius

Top Contributor
Vermutlich jemand, der die semantischen Unterschiede zwischen GET und POST kennt? :)

Und du meinst nur weil man ja etwas abfragt muss das jetzt ein GET request sein auch wenn die ganze Request URL damit ad absurdum geführt wird? Da finde ich sollte man andere Prioritäten setzen und zu Gunsten der Übersichtlichkeit die Parameter in den Body stecken.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Und du meinst nur weil man ja etwas abfragt muss das jetzt ein GET request sein auch wenn die ganze Request URL damit ad absurdum geführt wird?
Da finde ich sollte man andere Prioritäten setzen und zu Gunsten der Übersichtlichkeit die Parameter in den Body stecken.
Nene, da drehst du mir die Worte im Mund um.

Es ist halt nur nicht "krank", einen Get-Request zu nutzen, wenn man die Semantik eines Get-Requests möchte. Ad absurdum wird damit nichts geführt, auch wenn der Request-Parameter JSON ist. Das ist zwar nicht sehr üblich, aber völlig problemlos möglich.

Vor allem hat dein Fehler auch nichts mit der Art des Requests zu tun. Den Fehler hättest du genauso mit POST-Requests verursacht.
 

Ähnliche Java Themen


Oben