Intereting Posts

Как передать несколько параметров в URL?

Я пытаюсь выяснить, как передать несколько параметров в URL. Я хочу передать широту и долготу из моего класса android в Java-сервлет. Как я могу это сделать?

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); 

В этом случае вывод (записанный в файл) составляет 28.53438677.472097. Это работает, но я хочу передать широту и долготу в двух отдельных параметрах, чтобы моя работа на стороне сервера была уменьшена. Если это невозможно, как я могу хотя бы добавить пробел между lat & lon, чтобы я мог использовать класс токенизатора, чтобы получить свою широту и долготу. Я пробовал следующую строку, но безрезультатно.

  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 

Мой код сервлета выглядит следующим образом:

 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(); 

Также я хотел знать, что это самый безопасный и безопасный способ передачи данных с устройства Android на сервер.

    Эта

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

    должно работать. По какой-то странной причине вам нужно ? Перед первым параметром и & перед следующими.

    Используя составной параметр, например

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

    Тоже будет работать, но, безусловно, не очень приятно. Вы не можете использовать пробел там, где это запрещено в URL-адресе, но вы можете кодировать его как %20 или + (но это еще хуже).


    1 Утверждение ? Разделяет путь и параметры и что & отделяет параметры друг от друга, не объясняет ничего о причине. Некоторые RFC говорят «использовать? Там и там», но я не понимаю, почему они не выбрали одного и того же персонажа.

    Я не знаю много о Java, но аргументы URL-запроса должны быть разделены символом «&», а не «?».

    http://tools.ietf.org/html/rfc3986 – хорошее место для ссылки, используя ключевое слово «sub-delim». http://en.wikipedia.org/wiki/Query_string – еще один хороший источник.

    Вы можете передать несколько параметров как « ?param1=value1&param2=value2 »

    Но это не безопасно. Он уязвим для Cross Site Scripting (XSS) Attack .

    Ваш параметр можно просто заменить сценарием.

    Взгляните на эту статью и статью

    Вы можете сделать это безопасным, используя API StringEscapeUtils

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

    Даже использование https url для обеспечения безопасности без дополнительных мер предосторожности не является хорошей практикой.

    Посмотрите на соответствующий вопрос SE:

    Является ли URLEncoder.encode (строка, «UTF-8») плохой валидацией?