我正在尝试对 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/