如何POST方法并将参数重定向到链接? 有可能吗?
link = http://92.42.51.91/CGGateway/Default.aspx
我目前发送信息,我没有问题 但我无法重定向
当我正确发送信息时,我可以使用链接
URL url = new URL("http://62.68.645.32/Default.aspx");
Map<String, Object> params = new LinkedHashMap<String, Object>();
params.put("Timestamp", Timestamp);
params.put("Callback", "google.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
resp.sendRedirect(Link);
答案 0 :(得分:1)
通常,当人们说“重定向”时,它们意味着HTTP代码302重定向。 http客户端中的302代码的许多实现仅使用GET进行重定向,而不管原始请求方法如何,因此重定向&#39;使用此代码到POST端点。
克服这种情况的一种简单方法是自我发布形式:
<form name="autoform" action="..." method="POST">
<input type="hidden" name="param1" value="value1">
<input type="hidden" name="param2" value="value2">
...
</form>
并在用户的浏览器中自动提交:
<script type="text/javascript">
document.autoform.submit();
</script>
另一种方法是使用必须保留原始HTTP方法的代码307:
response.setHeader("Location", response.encodeRedirectURL(url));
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
在这种情况下,您将无法控制浏览器发送给url
的确切参数;相反,浏览器会自动发送它发送到重定向网址的相同参数。
答案 1 :(得分:0)
不确定我完全理解你,然而,我写了一个类来构建一个可用于获取或发布的查询字符串:
public class QueryBuilder {
private final String encoding;
private final StringBuilder buf = new StringBuilder();
public QueryBuilder(String encoding) {
this.encoding = encoding;
}
public boolean isEmpty() {
return buf.length() == 0;
}
public void add(String name, Object value) {
try {
if (value != null) {
if (buf.length() > 0) {
buf.append('&');
}
buf.append(name);
buf.append('=');
buf.append(URLEncoder.encode(value.toString(), encoding));
}
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException("Unsupported encoding " + encoding);
}
}
public String toURL(String url) {
if (buf.length() == 0) {
return url;
} else {
return url + '?' + buf.toString();
}
}
@Override
public String toString() {
return buf.toString();
}
}
要将参数作为POST传递,您可以执行以下操作:
QueryBuilder query = new QueryBuilder("UTF-8");
query.add("Timestamp", Timestamp);
query.add("Callback", "google.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
OutputStream out = cnt.getOutputStream();
try {
out.write(query.toString().getBytes("UTF-8"));
} finally {
out.close();
}
int stat = conn.getResponseCode();
if (stat < 200 || stat >= 300) {
throw new IOException("HTTP Error " + stat + ": "
+ conn.getResponseMessage());
}
...