Android Http-Post mit Parametern... wie?

Natac

Bekanntes Mitglied
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!)
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]

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!? :mad:
 
Zuletzt bearbeitet:

Natac

Bekanntes Mitglied
Das heißt, dass in Version 1+2 die URL "roh" (ohne Parameter) zum Server gesendet werden und in Version 3 die URL mit Parameter gesendet wird (wie es soll).
 

dzim

Top Contributor
versuch mal bitte folgendes

Java:
HttpParams httpParameters = new BasicHttpParams();

// Set the timeout in milliseconds until a connection is established.
HttpConnectionParams.setConnectionTimeout(httpParameters, 10000);

// Set the default socket timeout (SO_TIMEOUT) in milliseconds which is the timeout for waiting for data.
HttpConnectionParams.setSoTimeout(httpParameters, 15000);

HttpClient httpClient = new DefaultHttpClient(httpParameters);

und: nein, drittes ist sicher so nicht gewollt.

PS: Soweit ich weiss ist dein erster Versuch insofern wenig praktikabel, weil du damit den Content des Posts befüllst, beim zweiten hätte ich aber auch erwartet, dass es geht!

PPS: Übrigens ist das ein Problem, dass man evtl. auch noch anders angehen kann: schreib eine Main-Klasse die du ausführen kannst und versuch das vom PC aus - wenn es sich gleich verhält: GUT! Dann nimmst du Wireshark und zeichnest mal auf, was er eigentlich genau tut. Diese Art von debugging ist vielleicht nervig, aber man muss sich halt von Zeit zu Zeit mit so was rumschlagen...
 

Ähnliche Java Themen

Neue Themen


Oben