android - Android HTTPS 页面上的 POST 在回答时返回空页面

标签 android post ssl https httpurlconnection

我正在尝试对 HTTPS 网址执行 POST 请求。下面的代码。问题是

br.readline();

什么都不返回。没有任何形式的异常(exception)。

我尝试使用其他 url,一些在 php 中手工制作以在本地服务器上运行并返返回告,我尝试删除

br.flush();
br.close();

但我无法让它工作。 我在 stackoverflow 上阅读并遵循了许多示例,并在互联网上找到了这些示例,但我真的不明白我做错了什么。

SSL 部分似乎没问题(没有像我遇到的其他情况那样抛出异常)。

我在没有 SSL 的情况下尝试过,结果相同。几乎相同的代码曾经工作过,我一定是为了最坏的情况而改变了一些东西。测试平台为4.2.2 Android平板电脑。

manifest 里面的权限如下,其中一些需要做其他用途:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

我试过这个:https post in android 4.0但没办法。我读了很多其他文章,但我没有想法。

代码:

package shub.wisprv;

import java.io.IOException;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.OutputStream;
import java.io.InputStreamReader;
import android.os.AsyncTask;


public class example extends AsyncTask<Void, Void, String> {

    public void example() {}

    protected String doInBackground(Void... stringarray)  {


        try {
            URL login = new URL("https://it.portal.vodafone-wifi.com/jcp/it?res=login&uamip=192.168.6.1&uamport=80&challenge=f5aa36b054101c5edd56afcd00a10774&mac=18-FE-34-58-B8-80&ip=192.168.6.2&nasid=90-35-6E-41-64-B0&userurl=http://www.amiga.com");

            HttpsURLConnection postConn = (HttpsURLConnection) login.openConnection();

            String postFields = "UserName=foobar@foobar.com&Password=password&chooseCountry=VF_IT/";

            byte[] postData = postFields.getBytes("UTF-8");
            int postDataLength = postData.length;

            postConn.setRequestMethod("POST");
            postConn.setInstanceFollowRedirects(false);
            postConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            postConn.setRequestProperty("charset", "utf-8");
            postConn.setDoOutput(true);
            postConn.setDoInput(true);
            //postConn.setChunkedStreamingMode(0);
            postConn.setRequestProperty("Content-Length", Integer.toString(postDataLength));
            postConn.setUseCaches(false);

            OutputStream wr = (OutputStream) postConn.getOutputStream();
            wr.write(postData);

            wr.flush();
            wr.close();



            String html = "";
            String inputLine;
            BufferedReader br = new BufferedReader(new InputStreamReader(postConn.getInputStream()));
            while ((inputLine = br.readLine()) != null) {
                html += inputLine;
            }

            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return "";

    }
}

调用方法:

new example().execute();

最佳答案

你也必须输入这个

postConn.connect();

设置所有参数后,您的代码将如下所示:

public class example extends AsyncTask<Void, Void, String> {

public void example() {}

protected String doInBackground(Void... stringarray)  {


    try {
        URL login = new URL("https://it.portal.vodafone-wifi.com/jcp/it?res=login&uamip=192.168.6.1&uamport=80&challenge=f5aa36b054101c5edd56afcd00a10774&mac=18-FE-34-58-B8-80&ip=192.168.6.2&nasid=90-35-6E-41-64-B0&userurl=http://www.amiga.com");

        HttpsURLConnection postConn = (HttpsURLConnection) login.openConnection();

        String postFields = "UserName=foobar@foobar.com&Password=password&chooseCountry=VF_IT/";

        byte[] postData = postFields.getBytes("UTF-8");
        int postDataLength = postData.length;

        postConn.setRequestMethod("POST");
        postConn.setInstanceFollowRedirects(false);
        postConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        postConn.setRequestProperty("charset", "utf-8");
        postConn.setDoOutput(true);
        postConn.setDoInput(true);
        //postConn.setChunkedStreamingMode(0);
        postConn.setRequestProperty("Content-Length", Integer.toString(postDataLength));
        postConn.setUseCaches(false);
        postConn.connect(); //This is necessary to setup a connection 

        OutputStream wr = (OutputStream) postConn.getOutputStream();
        wr.write(postData);

        wr.flush();
        wr.close();



        String html = "";
        String inputLine;
        BufferedReader br = new BufferedReader(new InputStreamReader(postConn.getInputStream()));
        while ((inputLine = br.readLine()) != null) {
            html += inputLine;
        }

        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return "";

}
}

关于android - Android HTTPS 页面上的 POST 在回答时返回空页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31228158/

相关文章:

android - 在 Bundle 中传递对象 - ClassNotFoundException

java - 按钮仅在相继使用时才有效

android - Android 应用程序开发指南是否允许禁用特定应用程序的默认菜单和后退按钮?

iphone - 如何正确使用Oauth

mongodb - 我无法使用 angular 2 发布到我的 mongodb 服务器

ios - 如何获取用于 SSL 固定的公钥哈希?

android - Android Activity 之间的对象共享

javascript - $.post 错误回调中的 ReactDOM.render

ssl - 如何为新的 Instagram 图形 API 设置和使用 webhook

macos - MacOS 上的 Chrome 停止信任自签名 CA 颁发的证书