HttpUrlConnection在Java中工作,301在Android中工作

HttpUrlConnection在Java中工作,301在Android中工作,java,android,httpurlconnection,Java,Android,Httpurlconnection,我正在尝试编写一个Android应用程序,该应用程序在启动时会在一个我无法控制的预设网页上自动对用户进行身份验证。我尝试使用POST请求(在GET请求之后,以获取身份验证所需的cookies),但最终收到一个301-Moved永久错误 然而,同样的代码在Java中工作得非常好 InputStream inputStream = null; int length = 100; try { URL url = new URL(site);

我正在尝试编写一个Android应用程序,该应用程序在启动时会在一个我无法控制的预设网页上自动对用户进行身份验证。我尝试使用POST请求(在GET请求之后,以获取身份验证所需的cookies),但最终收到一个301-Moved永久错误

然而,同样的代码在Java中工作得非常好

    InputStream inputStream = null;
    int length = 100;

    try {

        URL url = new URL(site);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Host", host);
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        conn.setRequestProperty("Accept", "*/*");
        conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
        conn.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
        conn.setRequestProperty("X-Requested-With", "XMLHttpRequest");
        conn.setRequestProperty("Referer", referer);
        conn.setRequestProperty("Connection", "keep-alive");
        conn.setRequestProperty("Cookie", cookie);
        conn.setInstanceFollowRedirects(false);

        conn.setDoInput(true);
        conn.setDoOutput(true);


        //setting parameters needed for login
        List<AbstractMap.SimpleEntry> params = new ArrayList<>();
        params.add(new AbstractMap.SimpleEntry("type", type));
        params.add(new AbstractMap.SimpleEntry("console", console));
        params.add(new AbstractMap.SimpleEntry("login[password]", password));
        params.add(new AbstractMap.SimpleEntry("login[mail]", username));

        OutputStream os = conn.getOutputStream();
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(os, "UTF-8"));
        //write converted parameters
        writer.write(getQuery(params));
        writer.flush();
        writer.close();
        os.close();

        conn.connect();

        int response = conn.getResponseCode();
        Log.d(TAG, "The response is: " + response + "\n" + conn.getResponseMessage());
        inputStream = conn.getInputStream();

        // Convert the InputStream into a string
        String contentAsString = convertInputStreamToString(inputStream, length);
        Log.d(TAG, "Content of Webpage: " + contentAsString);

    } finally {
        if (inputStream != null) {
            inputStream.close();
        }
    }
InputStream InputStream=null;
整数长度=100;
试一试{
URL=新URL(站点);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
连接设置读取超时(10000);
连接设置连接超时(15000);
conn.setRequestMethod(“POST”);
conn.setRequestProperty(“主机”,主机);
conn.setRequestProperty(“用户代理”、“Mozilla/5.0(X11;Linux x86_64;rv:53.0)Gecko/20100101 Firefox/53.0”);
conn.setRequestProperty(“内容类型”,“应用程序/x-www-form-urlencoded;字符集=UTF-8”);
conn.setRequestProperty(“接受”,“*/*”);
conn.setRequestProperty(“接受语言”,“en-US,en;q=0.5”);
conn.setRequestProperty(“接受编码”、“gzip、deflate、br”);
conn.setRequestProperty(“X-request-With”,“XMLHttpRequest”);
conn.setRequestProperty(“Referer”,Referer);
conn.setRequestProperty(“连接”、“保持活动”);
conn.setRequestProperty(“Cookie”,Cookie);
conn.setInstanceFollow(假);
conn.setDoInput(真);
连接设置输出(真);
//设置登录所需的参数
List params=new ArrayList();
add(newAbstractMap.SimpleEntry(“type”,type));
add(newAbstractMap.SimpleEntry(“console”,console));
add(newAbstractMap.SimpleEntry(“login[password]”,password));
add(新的AbstractMap.SimpleEntry(“登录[邮件]”,用户名));
OutputStream os=conn.getOutputStream();
BufferedWriter=新的BufferedWriter(
新的OutputStreamWriter(操作系统,“UTF-8”);
//写入转换的参数
write(getQuery(params));
writer.flush();
writer.close();
os.close();
连接();
int response=conn.getResponseCode();
Log.d(标记“响应为:”+response+“\n”+conn.getResponseMessage());
inputStream=conn.getInputStream();
//将InputStream转换为字符串
字符串contentAsString=convertInputStreamToString(inputStream,长度);
Log.d(标签,“网页内容:”+contentAsString);
}最后{
如果(inputStream!=null){
inputStream.close();
}
}

询问服务器维护人员在什么情况下会发生这种情况。是否有充分的理由不执行重定向?@nandsito执行重定向时,服务器将返回Android上的登录页面。在Java中,不遵循重定向并没有什么区别