Postmethode: Wie kann man eine bestimmte Adresse anfordern?
-
19-09-2019 - |
Frage
Ich möchte eine Postanfrage an eine bestimmte Adresse wieder aufnehmen, lassen Sie sie zum Beispiel sein
Für Postanfragen habe ich eine universelle Methode erstellt:
private String postMethod(String url, HashMap<String, String> headers, String encodedAuthorizationString) throws HttpException, IOException {
HttpClient client = new HttpClient();
PostMethod post = new PostMethod(url);
post.setRequestHeader("Authorization", encodedAuthorizationString);
if(headers != null && !headers.isEmpty()){
for(Entry<String, String> entry : headers.entrySet()){
post.setRequestHeader(new Header(entry.getKey(), entry.getValue()));
}
}
client.executeMethod(post);
String responseFromPost = post.getResponseBodyAsString();
post.releaseConnection();
return responseFromPost;
}
wobei Header Paare darstellen (Schlüssel, Wert), z. B. "Produkt [Titel], "Titletest"). Ich habe versucht, die Methode zu verwenden, indem ich Postmethode aufgerufen habe ("http: //staging.myproject.com.products.xml", Header," xxx "); wobei Header Paare enthalten
("Produkt [Titel], "Titletest"),
("Produkt [Inhalt], "TestContent"),
(Produkt [Preis], "12,3"),
("Tags", "AAA, BBB")
Der Server hat jedoch eine Fehlermeldung zurückgegeben.
Weiß jemand, wie man die Adresse analysiert?
Um es mit der obigen Methode zu verwenden? Welcher Teil ist URL? Sind die Parameter korrekt eingestellt?
Vielen Dank.
Lösung
Ich habe ein Problem gefunden:
private String postMethod(String url, HashMap<String, String> headers, String encodedAuthorizationString) throws HttpException, IOException {
HttpClient client = new HttpClient();
PostMethod post = new PostMethod(url);
post.setRequestHeader("Authorization", encodedAuthorizationString);
if(headers != null && !headers.isEmpty()){
for(Entry<String, String> entry : headers.entrySet()){
//post.setRequestHeader(new Header(entry.getKey(), entry.getValue()));
//in the old code parameters were set as headers (the line above is replaced with the line below)
post.addParameter(new Header(entry.getKey(), entry.getValue()));
}
}
client.executeMethod(post);
String responseFromPost = post.getResponseBodyAsString();
post.releaseConnection();
return responseFromPost;
}
Parameter:
("Produkt [Titel], "Titletest"),
("product[content]", "TestContent"), (product[price], "12.3"), ("tags", "aaa,bbb")
Andere Tipps
Sie scheinen die URL -Abfrageparameter wie Produkt [Preis] = 12,3 mit HTTP -Anforderungsheadern zu verwechseln. Die Verwendung von setRequestheader () soll die HTTP-Anforderungsheader festlegen, die Meta-Data sind, die mit jeder HTTP-Anforderung verknüpft sind.
Um die Abfrageparameter festzulegen, sollten Sie sie nach einem "?" und urlencodiert, wie in Ihrer Beispiel -URL.