Android httpGet problema
Estoy intentando ejecutar el siguiente enlace usando el código siguiente:
class httpget{ HttpGet httpGet=null; public void linkexecute(){ String url="http://<server>/<path>/action=send&msg=new message"; httpGet= new HttpGet(url); // line 1 .... } at line 1 it is giving error "Illegal arguement exception" java.lang.IllegalArgumentException: Illegal character in query at index 77: http://<server>/<path>/sms.json?action=send&msg=new message at java.net.URI.create(URI.java:970) at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75) at com.sms.login.LoginService.sendSms(LoginService.java:143)
Considerando que no hay error para la siguiente URL que no tiene lagunas en las palabras de "msg ="
- ¿Qué devuelve el método getResponseMessage () de HttpURLConnection?
- Cómo entrar en la red de Android, preferencia de biblioteca HTTP?
- SecurityException: Permiso denegado (¿permiso de Internet perdido?)
- Enviar datos binarios a través de POST en android
- LoopJ AndroidAsyncHttp y JSON POST ARRAY
String url="http://<server>/<path>/action=send&msg=newmessage";
¿Cómo puedo resolver el problema de la brecha en las palabras en la URL?
- Cómo reanudar una descarga interrumpida
- Lectura de archivos de texto desde el servidor en Android
- ¿Puedo saber cómo funciona el soporte de modificación 304 No Modifield?
- Cómo modificar los encabezados de solicitudes HTTP desde una aplicación de Android?
- Las cookies no se almacenan en la API de Webview android 21 y superiores
- Error interno del servidor
- ¿Android mantiene las imágenes descargadas de HTTP en caché?
- HttpGet params que no se envían
Aquí, te doy una función que eliminará todos los caracteres no válidos de la url. Pase su url en esta función y obtendrá una nueva url con cadenas codificadas.
public static String convertURL(String str) { String url = null; try{ url = new String(str.trim().replace(" ", "%20").replace("&", "%26") .replace(",", "%2c").replace("(", "%28").replace(")", "%29") .replace("!", "%21").replace("=", "%3D").replace("<", "%3C") .replace(">", "%3E").replace("#", "%23").replace("$", "%24") .replace("'", "%27").replace("*", "%2A").replace("-", "%2D") .replace(".", "%2E").replace("/", "%2F").replace(":", "%3A") .replace(";", "%3B").replace("?", "%3F").replace("@", "%40") .replace("[", "%5B").replace("\\", "%5C").replace("]", "%5D") .replace("_", "%5F").replace("`", "%60").replace("{", "%7B") .replace("|", "%7C").replace("}", "%7D")); }catch(Exception e){ e.printStackTrace(); } return url; }
Definitivamente debe utilizar URLEncoder.encode(String, String)
Creo que el problema es con los parámetros de URL. En lugar de codificar o reemplazar toda la URL, sólo codificar los parámetros como este:
Url: http://myHost.com/mail.do?address=New York city@&time=12$3; right url:http://myHost.com/mail.do? + UrlEncode(address) + "&" + UrlEncode(time);
Otro ejemplo es:
Map<String, String> params = new HashMap<String, String>(); params.put("email", URLEncoder.encode(loginStr)); params.put("pass", URLEncoder.encode(passwStr)); Model.doAuthUser(params, userCallback);
Loks de Model.doAuthUser como siguiente:
String url = "http://myHost.com/mail.do"; if (params != null) { url += "?"; Boolean beginAddParams = true; for (Entry<String, String> entryParams : params.entrySet()) { if (!beginAddParams) { url +="&"; } else { beginAddParams = false; } url += entryParams.getKey() + "=" + entryParams.getValue(); }
Y usa la url
donde quieras.
Creo que deberías usar% 20 en lugar del espacio
El URLEncoder no funcionó para mí cuando estaba publicando variables en mi webservice, porque estaba reemplazando todos los parámetros. Acabé usando
URI uri = new URI("http", "server", "/path", "action=send&msg=newmessage", null); String url = uri.toASCIIString();
Y más tarde en analizar mis datos descargados usando httpPost con el httpClient …
String xml = null; DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); xml = EntityUtils.toString(httpEntity);
Supongo que el método httpGet funcionará de la misma manera.
- ¿La actualización de la fecha de compra de la suscripción de Android en la aplicación se actualiza con cada renovación mensual?
- Logcat no muestra nada