web-dev-qa-db-fra.com

Comment passer plusieurs paramètres dans une URL?

J'essaie de comprendre comment passer plusieurs paramètres dans une URL. Je souhaite transmettre la latitude et la longitude de mon Android classe à un Java servlet. Comment puis-je le faire?)?

URL url;
double lat=touchedPoint.getLatitudeE6() / 1E6;
double lon=touchedPoint.getLongitudeE6() / 1E6;
url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+lon);

Dans ce cas, la sortie (écrite dans le fichier) est 28.53438677.472097. Cela fonctionne, mais je souhaite définir la latitude et la longitude dans deux paramètres distincts afin de réduire mon travail côté serveur. Si ce n'est pas possible, comment puis-je au moins ajouter un espace entre lat et lon afin que je puisse utiliser tokenizer class pour obtenir ma latitude et ma longitude. J'ai essayé de suivre la ligne mais en vain.

    url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+" "+lon);
output- Nothing is written to file
        url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"&?param2="+lon);
output- 28.534386 (Only Latitude)
        url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"?param2="+lon);
output- 28.532577?param2=77.502996

Mon code de servlet est le suivant:

req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
final String par1 =  req.getParameter("param1");
final String par2 = req.getParameter("param2");
FileWriter fstream = new FileWriter("C:\\Users\\Hitchhiker\\Desktop\\out2.txt");
BufferedWriter out = new BufferedWriter(fstream);
out.write(par1);
out.append(par2);
out.close();

Je voulais aussi savoir si c’était le moyen le plus sûr et sécurisé de transmettre les données d’un appareil Android à un serveur).

31
rishiag

Cette

url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"&param2="+lon);

doit travailler. Pour une raison quelconque1, vous avez besoin ? avant le premier paramètre et & avant les suivants.

Utiliser un paramètre composé comme

url = new URL("http://10.0.2.2:8080/HelloServlet/PDRS?param1="+lat+"_"+lon);

fonctionnerait aussi, mais ce n’est sûrement pas Nice. Vous ne pouvez pas utiliser un espace car il est interdit dans une URL, mais vous pouvez le coder comme %20 ou + _ (mais c'est encore pire style).


1 déclarant que ? sépare le chemin et les paramètres et que & séparer les paramètres les uns des autres n'explique rien sur la raison. Certains RFC disent "utiliser? Là et là", mais je ne vois pas pourquoi ils n'ont pas choisi le même personnage.

52
maaartinus

Je ne sais pas grand chose à propos de Java mais les arguments de requête d'URL doivent être séparés par "&", pas "?"

http://tools.ietf.org/html/rfc3986 est un bon endroit pour la référence en utilisant "sub-delim" comme mot clé. http://en.wikipedia.org/wiki/Query_string est une autre bonne source.

3
Tõnu Samuel

Vous pouvez transmettre plusieurs paramètres en tant que "?param1=value1&param2=value2"

Mais ce n'est pas sécurisé. Il est vulnérable à Cross Site Scripting (XSS) Attack.

Votre paramètre peut être simplement remplacé par un script.

Regardez ceci article et article

Vous pouvez le sécuriser en utilisant l’API de StringEscapeUtils

static String   escapeHtml(String str) 
          Escapes the characters in a String using HTML entities.

Même utiliser httpsurl pour la sécurité sans les précautions ci-dessus n'est pas une bonne pratique.

Jetez un coup d'œil à la question SE connexe:

RLEncoder.encode (chaîne, "UTF-8") est-il une validation médiocre?

2
Ravindra babu