Ich versuche gerade einen Http-Post mit Parametern an einen Server abzusetzen, was mir aber nicht gelingen will. Die Parameter kommen nie beim Server an.
Version 1: (funkioniert nicht!)
Und so schick ich den Request ab:
Bis auf Version 3 werden sonst die Parameter einfach weggelassen. Programmiere auf API-Level 16. Was mache ich falsch!? Kann doch nicht Sinn dieser ganzen APIs sein, dass ich mir den String am Ende doch selbst zusammenbasteln muss!?
Version 1: (funkioniert nicht!)
Java:
private static HttpPost buildRequest(final String url, final Map<String, String> params) throws UnsupportedEncodingException {
HttpPost post = new HttpPost(url);
List<NameValuePair> postParams = new ArrayList<NameValuePair>();
for(String key:params.keySet()){
postParams.add(new BasicNameValuePair(key, params.get(key));
}
post.addEntity(new UrlEncodedFormEntity(postParams));
return post;
}[/Java]
Version 2 ([COLOR="#FF0000"]funktioniert nicht![/COLOR])
[code=Java] private static HttpPost buildRequest(final String url, final Map<String, String> params) throws UnsupportedEncodingException {
HttpPost post = new HttpPost(url);
final HttpParams postParams = new BasicHttpParams();
for(String key:params.keySet()){
postParams.setParameter(key, params.get(key));
}
post.setParams(postParams);
return post;
}[/Java]
Version 3 ([COLOR="#008000"]funktioniert, aber bestimmt so nicht gewollt[/COLOR])
[code=Java] private static HttpPost buildRequest(final String url, final Map<String, String> params) throws UnsupportedEncodingException {
final StringBuilder uri = new StringBuilder(url);
boolean first = true;
for (final String name : params.keySet()) {
uri.append(first ? "?" : "&");
first = false;
uri.append(URLEncoder.encode(name, HTTP.UTF_8));
uri.append("=");
uri.append(URLEncoder.encode(params.get(name), HTTP.UTF_8));
}
return new HttpPost(uri.toString());
}
Und so schick ich den Request ab:
[Java]private InputStream sendRequest(final HttpPost request) {
InputStream result = null;
try {
final HttpClient httpClient = new DefaultHttpClient();
final HttpResponse response = httpClient.execute(request);
final HttpEntity entity = response.getEntity();
result = entity.getContent();
}
catch (final Exception e) {
throw new RuntimeException("Error sending request="+request, e);
}
return result;
}[/code]
InputStream result = null;
try {
final HttpClient httpClient = new DefaultHttpClient();
final HttpResponse response = httpClient.execute(request);
final HttpEntity entity = response.getEntity();
result = entity.getContent();
}
catch (final Exception e) {
throw new RuntimeException("Error sending request="+request, e);
}
return result;
}[/code]
Bis auf Version 3 werden sonst die Parameter einfach weggelassen. Programmiere auf API-Level 16. Was mache ich falsch!? Kann doch nicht Sinn dieser ganzen APIs sein, dass ich mir den String am Ende doch selbst zusammenbasteln muss!?
Zuletzt bearbeitet: