Java: Wie kann ich UrlConnection verwenden, um eine Anfrage mit Autorisierung zu stellen?
Möchte ich generieren, POST-Anforderung an einen server, der eine Authentifizierung erfordert. Ich habe versucht, verwenden Sie die folgende Methode:
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 doesn ' T erhalten die Genehmigung der Daten. Die Zeile, die Sie ausführen soll, fügen Sie die Autorisierungsdaten ist folgende:
conn.setRequestProperty ("Authorization", "Basic " + encodedString);
ist und die Linie
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
wirft eine IOException.
Trotzdem wäre ich sehr dankbar, wenn jemand könnte vorschlagen, keine Lösung von der Logik, die oben zum aktivieren der Autorisierung über POST mit UrlConnection.
aber offensichtlich funktioniert es nicht wie es soll, obwohl, wenn die gleiche Logik verwendet, für die GET-Anforderung funktioniert alles einwandfrei.
InformationsquelleAutor der Frage Niko Gamulin | 2010-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem feinen Beispiel finden Sie hier. Powerlord es richtig, untenfür POST, die Sie brauchen
HttpURLConnection
statt.Unten ist der code dazu,
Ändern
URLConnection
zuHttpURLConnection
zu machen, POST-Anforderung.Vorschlag (...in den Kommentaren):
Müssen Sie möglicherweise zum festlegen dieser Eigenschaften zu,
InformationsquelleAutor der Antwort Adeel Ansari
Sehe ich nicht überall im code, wo Sie angeben, dass dies eine POST-Anfrage. Dann wieder, müssen Sie eine
java.net.HttpURLConnection
zu tun.In der Tat, empfehle ich mit
HttpURLConnection
stattURLConnection
mitconn.setRequestMethod("POST");
und sehen, ob es die noch gibt Ihnen Probleme.InformationsquelleAutor der Antwort Powerlord
Tun oAuth-Authentifizierung zu externen app (INSTAGRAM) Schritt 3: "get token nach Erhalt des Codes" Nur folgenden code bei mir funktioniert
Wert Stand auch, dass es für mich funktionierte mit einigen localhost-URL mit einer callback-servlet konfiguriert mit dem Namen "callback-in web.xml und callback-URL registriert: z.B. localhost:8084/MyAPP/docs/insta/callback
ABER nach erfolgreich absolvierter Authentifizierung Schritten, mit der gleichen externen Website "INSTAGRAM" zu tun BEKOMMEN, der Tags oder MEDIEN zum abrufen von JSON-Daten mit erste Methode hat nicht funktioniert.
In meinem servlet zu tun BEKOMMEN mit url wie
z.B. api.instagram.com/v1/tags/MYTAG/media/recent?access_token=MY_TOKEN nur Methode gefunden HIER gearbeitet
Vielen Dank an alle Helfer
InformationsquelleAutor der Antwort lejallec
Senden einer POST-Anfrage Anruf:
Wenn Sie wollen gesendete text in der Anfrage Verwendung:
InformationsquelleAutor der Antwort Dimitris
Ich lief in heute dieses problem und keine der Lösungen hier gepostet gearbeitet. Allerdings ist der code gepostet hier arbeitete für eine POST Anfrage:
Es stellt sich heraus, dass es nicht die Genehmigung, dass ist das problem. In meinem Fall war es ein encoding problem. Der content-type ich brauchte, war application/json aber von der Java-Dokumentation:
Die encode-Funktion übersetzt den string in application/x-www-form-urlencoded.
Nun, wenn Sie nicht setzen ein Content-Typ ist, erhalten Sie möglicherweise ein 415 Unsupported Media Type error. Wenn du es auf application/json oder alles, was nicht application/x-www-form-urlencodederhalten Sie eine IOException. Um dies zu lösen, einfach vermeiden die encode-Methode auf.
Für dieses spezielle Szenario, sollten die folgenden arbeiten:
Ein weiteres kleines Stück von Informationen, die hilfreich sein könnten, warum der code bricht beim erstellen der buffered reader ist, weil die POST Anfrage tatsächlich wird nur ausgeführt, wenn conn.getInputStream() genannt wird.
InformationsquelleAutor der Antwort Harvinder
Auf API-22 Die Verwendung Von BasicNamevalue-Pair-Mädchen ist depricated, verwenden Sie stattdessen die HASMAP. Erfahren Sie mehr über die HasMap Besuch hier mehr auf hasmap Entwickler.android
und rufen Sie die Funktion, wenn Sie benötigt, um die Daten vom server entweder per post oder get wie diese
Nun ist es abgeschlossen.Viel Spaß!!! Kommentar, wenn ein problem zu finden.
InformationsquelleAutor der Antwort yubaraj poudel
HTTP-Autorisierung unterscheidet sich nicht zwischen GET und POST-requests, also ich würde erstmal davon ausgehen, dass etwas anderes falsch ist. Statt der Einstellung der Authorization-header direkt, ich würde vorschlagen, mit der java.net.Genehmigung Klasse, aber ich bin nicht sicher, wenn es Ihr problem löst. Vielleicht ist dein server ist irgendwie so konfiguriert, dass eine unterschiedliche Autorisierungs-Schema als "basic" für den post-requests?
InformationsquelleAutor der Antwort jarnbjo
war ich auf der Suche Informationen darüber, wie eine POST-Anfrage. Ich muss noch angegeben werden, dass mi-Anforderung wird eine POST-Anforderung, da arbeite ich mit RESTful-web-services, die nur POST-Methoden, und wenn das ersuchen nicht posten, wenn ich versuche, die Anfrage, erhalte ich eine " HTTP-Fehler 405. Ich versichere, dass mein code nicht falsch machen das nächste: ich erstelle eine Methode in meinem web-service aufgerufen wird durch die GET-Anforderung, und ich Stelle meine Anwendung, sodass die web service-Methode und es funktioniert.
Mein code ist der nächste:
InformationsquelleAutor der Antwort Oscar