发送用户参数的一种方法是将它们附加到URL:
URLAddress+="?param1=value1+param2=value2"
我还能如何将用户参数发送到服务器?这些是HttpServletRequest方法
要读取的参数getParameter(param1);
接收器端的。
我试过
setRequestProperty("param1","value1");
HttpURLConnection 的。但是, getParameter()无法在请求中找到它们。
我正在尝试将它们发送到URL之外,以便它们不会被显示。
答案 0 :(得分:0)
您只有两种可能性:在GET请求的情况下将它们附加到URL,然后它们是可见的,或者在POST请求的情况下将它们写为正文:
/**
* Convert a Map to a query string.
* @param values the map with the values
* <code>null</code> will be encoded as empty string, all other
* objects are converted to
* String by calling its <code>toString()</code> method.
* @return e.g. "key1=value&key2=&email=max%40example.com"
*/
public static String queryString(Map<String, Object> values) {
StringBuilder sbuf = new StringBuilder();
String separator = "";
for (Map.Entry<String, Object> entry : values.entrySet()) {
String value = entry.getValue() == null
? "" : String.valueOf(entry.getValue());
sbuf.append(separator);
sbuf.append(urlEncode(entry.getKey()));
sbuf.append('=');
sbuf.append(urlEncode(value));
separator = "&";
}
return sbuf.toString();
}
static String urlEncode(String value) {
try {
return URLEncoder.encode(value, "UTF-8");
} catch (UnsupportedEncodingException e) {
return value;
}
}
如果是POST,您必须将标题Content-Type
设置为application/x-www-form-urlencoded
。我建议使用'UTF-8'作为编码。如果这不适合你,你必须挖掘如何处理不同的编码。
所以而不是
http://www.example.com/path/resource?abc=124&xyz=John+Doe
你写的是身体:
abc=124&xyz=John+Doe
不应该将参数设置为标题(addRequestHeader()
),因为大多数中间件(例如Web应用程序防火墙,代理,负载平衡器)会解析标头,您可能会与预定义的标头发生冲突。
上述代码取自DavidWebb。在那里,您可以看到一个库列表,当您必须处理HTTP请求并且不想本地使用HttpURLConnection
时,这些库可以减轻您的生活。
为什么我要添加用于构建查询字符串的代码?
您可以在此处阅读很多问题,其中错误在于他们没有正确编码参数名称或值。