当我执行 HTTP POST 请求时,即使网页自动重定向,我也会收到 200 作为响应代码,而不是 3xx。我试过this ,但不起作用。我的代码:
HttpURLConnection con = getMultipartHttpURLConnection(
formParameter.getServerUrl(), boundary);
setRequestHeaders(con);
String urlParameters = getParameter(formParameter.getForm());
// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
responseCode = con.getResponseCode();
String header = con.getHeaderField("Location");
编辑:
通过一些研究,我发现如果服务器配置为重定向到启用了 https://
的网址,那么我将得到 3xx
作为响应代码,否则不会。上面链接中给出的示例具有相同的作用。
最佳答案
这是因为 HttpURLConnection
很智能,可以在内部处理重定向。 200
响应代码是发生重定向的新位置的响应代码。
我知道如何检索重定向 URL 的唯一方法是使用 setFollowRedirects(false)
并手动遵循重定向。
请参阅以下示例:
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
public class GetRedirectURL {
public static void main(final String... args) throws IOException {
final URL url = new URL("http://www.google.com/");
//HttpURLConnection.setFollowRedirects(false);
final HttpURLConnection con = (HttpURLConnection) url.openConnection();
//con.setInstanceFollowRedirects(false);
final int responseCode = con.getResponseCode();
final String location = con.getHeaderField("Location");
System.err.format("%d%n%s%n", responseCode, location);
}
}
如果您不修改此代码,它将打印 200 null
。如果取消注释任何控制重定向行为的行,输出将更改为 `200 http://www.google ...' .
重要的是,在 HttpURLConnection
实例的状态机通过从响应读取的方法调用发送请求之前完成重定向设置的修改。
关于java - 如何从http服务器获取重定向url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27247237/