peticiones peticion java android http-get

java - peticiones get y post php



¿Cómo agregar parámetros a una solicitud HTTP GET en Android? (8)

A partir de HttpComponents 4.2+ hay una nueva clase URIBuilder , que proporciona una manera conveniente para generar URI.

Puede usar crear URI directamente desde String URL:

List<NameValuePair> listOfParameters = ...; URI uri = new URIBuilder("http://example.com:8080/path/to/resource?mandatoryParam=someValue") .addParameter("firstParam", firstVal) .addParameter("secondParam", secondVal) .addParameters(listOfParameters) .build();

De lo contrario, puede especificar todos los parámetros de forma explícita:

URI uri = new URIBuilder() .setScheme("http") .setHost("example.com") .setPort(8080) .setPath("/path/to/resource") .addParameter("mandatoryParam", "someValue") .addParameter("firstParam", firstVal) .addParameter("secondParam", secondVal) .addParameters(listOfParameters) .build();

Una vez que haya creado el objeto URI , simplemente necesita crear el objeto HttpGet y realizarlo:

//create GET request HttpGet httpGet = new HttpGet(uri); //perform request httpClient.execute(httpGet ...//additional parameters, handle response etc.

Tengo una solicitud HTTP GET que estoy intentando enviar. Intenté agregar los parámetros a esta solicitud creando primero un objeto BasicHttpParams y agregando los parámetros a ese objeto, y luego llamando a setParams( basicHttpParms ) en mi objeto HttpGet . Este método falla. Pero si agrego manualmente mis parámetros a mi URL (es decir, append ?param1=value1&param2=value2 ) tiene éxito.

Sé que me falta algo aquí y cualquier ayuda sería muy apreciada.


El método

setParams()

me gusta

httpget.getParams().setParameter("http.socket.timeout", new Integer(5000));

solo agrega parámetros HttpProtocol.

Para ejecutar el httpGet debes agregar tus parámetros a la url manualmente

HttpGet myGet = new HttpGet("http://foo.com/someservlet?param1=foo&param2=bar");

o utilice la solicitud posterior, la diferencia entre las solicitudes de obtención y publicación se explica here , si está interesado


Para construir uri con los parámetros get, Uri.Builder proporciona una forma más efectiva.

Uri uri = new Uri.Builder() .scheme("http") .authority("foo.com") .path("someservlet") .appendQueryParameter("param1", foo) .appendQueryParameter("param2", bar) .build();


Si tiene URL constantes, recomiendo utilizar http-request simplificado basado en apache http.

Puedes construir tu cliente de la siguiente manera:

private filan static HttpRequest<YourResponseType> httpRequest = HttpRequestBuilder.createGet(yourUri,YourResponseType) .build(); public void send(){ ResponseHendler<YourResponseType> rh = httpRequest.execute(param1, value1, param2, value2); handler.ifSuccess(this::whenSuccess).otherwise(this::whenNotSuccess); } public void whenSuccess(ResponseHendler<YourResponseType> rh){ rh.ifHasContent(content -> // your code); } public void whenSuccess(ResponseHendler<YourResponseType> rh){ LOGGER.error("Status code: " + rh.getStatusCode() + ", Error msg: " + rh.getErrorText()); }

Nota: hay muchos métodos útiles para manipular su respuesta.


Uso una lista de NameValuePair y URLEncodedUtils para crear la cadena de url que quiero.

protected String addLocationToUrl(String url){ if(!url.endsWith("?")) url += "?"; List<NameValuePair> params = new LinkedList<NameValuePair>(); if (lat != 0.0 && lon != 0.0){ params.add(new BasicNameValuePair("lat", String.valueOf(lat))); params.add(new BasicNameValuePair("lon", String.valueOf(lon))); } if (address != null && address.getPostalCode() != null) params.add(new BasicNameValuePair("postalCode", address.getPostalCode())); if (address != null && address.getCountryCode() != null) params.add(new BasicNameValuePair("country",address.getCountryCode())); params.add(new BasicNameValuePair("user", agent.uniqueId)); String paramString = URLEncodedUtils.format(params, "utf-8"); url += paramString; return url; }


HttpClient client = new DefaultHttpClient(); Uri.Builder builder = Uri.parse(url).buildUpon(); for (String name : params.keySet()) { builder.appendQueryParameter(name, params.get(name).toString()); } url = builder.build().toString(); HttpGet request = new HttpGet(url); HttpResponse response = client.execute(request); return EntityUtils.toString(response.getEntity(), "UTF-8");


class Searchsync extends AsyncTask<String, String, String> { @Override protected String doInBackground(String... params) { HttpClient httpClient = new DefaultHttpClient();/*write your url in Urls.SENDMOVIE_REQUEST_URL; */ url = Urls.SENDMOVIE_REQUEST_URL; url = url + "/id:" + m; HttpGet httpGet = new HttpGet(url); try { // httpGet.setEntity(new UrlEncodedFormEntity(nameValuePairs)); // httpGet.setEntity(new StringEntity(json.toString())); HttpResponse response = httpClient.execute(httpGet); HttpEntity resEntity = response.getEntity(); if (resEntity != null) { String responseStr = EntityUtils.toString(resEntity).trim(); Log.d("Response from PHP server", "Response: " + responseStr); Intent i = new Intent(getApplicationContext(), MovieFoundActivity.class); i.putExtra("ifoundmovie", responseStr); startActivity(i); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }//enter code here }


List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("param1","value1"); String query = URLEncodedUtils.format(params, "utf-8"); URI url = URIUtils.createURI(scheme, userInfo, authority, port, path, query, fragment); //can be null HttpGet httpGet = new HttpGet(url);

URI javadoc

Nota: url = new URI(...) tiene errores