发送用户参数的一种方法是将它们附加到URL:
URLAddress+="?param1=value1+param2=value2"否则,我如何向服务器发送用户参数?这些是HttpServletRequest方法要读取的参数
getParameter(param1);在接收器的一端。
我试过了
setRequestProperty("param1","value1"); HttpURLConnection的。但是,getParameter()无法在请求中找到它们。
我试图将它们发送到URL之外,这样它们就不会被看到。
发布于 2014-03-10 10:41:23
您只有两种可能性:在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时,这些库可以简化您的生活。
为什么我要添加构建查询字符串的代码?
您可以在这里阅读许多问题,因此错误之处在于它们没有正确编码参数名称或值。
https://stackoverflow.com/questions/22296907
复制相似问题