38 Stimmen

Java: Wie kann man UrlConnection verwenden, um eine Anfrage mit Autorisierung zu stellen?

Ich möchte eine POST-Anfrage an einen Server erstellen, die eine Authentifizierung erfordert. Ich habe versucht, die folgende Methode zu verwenden:

private synchronized String CreateNewProductPOST (String urlString, String encodedString, String title, String content, Double price, String tags) {

    String data = "product[title]=" + URLEncoder.encode(title) +
                "&product[content]=" + URLEncoder.encode(content) + 
                "&product[price]=" + URLEncoder.encode(price.toString()) +
                "&tags=" + tags;
    try {
        URL url = new URL(urlString);
        URLConnection conn;
        conn = url.openConnection();
        conn.setRequestProperty ("Authorization", "Basic " + encodedString);
        conn.setDoOutput(true);
        conn.setDoInput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush(); 
        // Get the response 
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
        String line; 
        while ((line = rd.readLine()) != null) { 
            // Process line... 
            } 
        wr.close(); 
        rd.close(); 
        return rd.toString();
    } catch (MalformedURLException e) {

        e.printStackTrace();
        return e.getMessage();
    }
    catch (IOException e) {

        e.printStackTrace();
        return e.getMessage();
    } 
}

aber der Server empfängt die Autorisierungsdaten nicht. Die Zeile, die die Autorisierungsdaten hinzufügen soll, ist die folgende:

conn.setRequestProperty ("Authorization", "Basic " + encodedString);

und die Linie

BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

löst ebenfalls eine IOException aus.

Jedenfalls wäre ich sehr dankbar, wenn jemand eine Korrektur der obigen Logik vorschlagen könnte, um die Autorisierung mittels POST mit UrlConnection zu ermöglichen.

aber offensichtlich funktioniert es nicht so, wie es sollte, obwohl, wenn die gleiche Logik für GET-Anforderungen verwendet wird, alles gut funktioniert.

0voto

jarnbjo Punkte 33136

Die HTTP-Autorisierung unterscheidet nicht zwischen GET- und POST-Anfragen, daher würde ich zunächst davon ausgehen, dass

-1voto

Oscar Punkte 1

I

    URL server = null;
    URLConnection conexion = null;
    BufferedReader reader = null;
    server = new URL("http://localhost:8089/myApp/resources/webService");
    conexion = server.openConnection();
    reader = new BufferedReader(new InputStreamReader(server.openStream()));
    System.out.println(reader.readLine());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X