JAVA POST请求然后重定向到它?

时间:2016-10-20 13:42:37

标签: java redirect post

我需要做的是将POST请求发送到具有两个参数的特定URL,并且在发送请求时,我需要将用户重定向到该链接,以便他能够访问功能。

到目前为止,我通过各种示例设法做到了这一点:

    private void postRemoteAdvisoryLink() throws IOException {
        URL obj = new URL(KdrmApplicationContext.getRemoteAdvisoryUrlPath());
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setConnectTimeout(60000);
        con.setRequestMethod("POST");
        con.setRequestProperty("User-Agent", "Mozilla/5.0");
        con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

        // For post only - start
        con.setDoOutput(true);
        OutputStream os = con.getOutputStream();
        os.write(("?auth=ssor&TransportKey=" + ssorTransportKey).getBytes());
        os.flush();
        os.close();

        int responseCode = con.getResponseCode();
    }

问题是现在我在尝试执行OutputStream os = con.getOutputStream()时遇到连接超时;线。此外,我仍然不知道如何在请求完成时重定向用户。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用基本的Java URL类需要您手动处理HTTP协议的详细信息 - 最好使用像Apache Http Components这样的库,因为它们会为您处理底层协议。可以找到一些示例,包括POST请求on their website

鉴于原始问题,Timeout可能与主机没有响应或您的Java应用程序无法连接到给定URL有关(例如,由于没有代理配置)。

如果要根据答案重定向请求,则需要检查响应标头和http状态 - 如果状态为302,则应该有一个名为Location的标头,其中包含您应该创建另一个标头的URL请求。 在获取OutputStream之前,还要确保设置Content-Length标头(理想情况下也是Content-Type标头)。