重定向和POST方法

时间:2017-11-02 13:54:23

标签: java servlets

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

2 个答案:

答案 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());
}
...