我正在尝试将一些数据发布到我的Android应用程序中的https网址,以获得json格式的响应。
我面临两个问题:
is = conn.getInputStream();
引发
java.io.FileNotFoundException
如果我对HttpsURLConnection做错了,我不会得到。
当我调试代码(使用eclipse)时出现了第二个问题;我在
之后设置了一个断点conn.setDoOutput(真);
并且,在检查conn
值时,我发现变量doOutput
仍设置为false
并输入GET
。
我的https POST方法如下,POSTData
是一个扩展ArrayList<NameValuePair>
的类
private static String httpsPOST(String urlString, POSTData postData, List<HttpCookie> cookies) {
String result = null;
HttpsURLConnection conn = null;
OutputStream os = null;
InputStream is = null;
try {
URL url = new URL(urlString);
conn = (HttpsURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setUseCaches (false);
conn.setDoInput(true);
conn.setDoOutput(true);
if(cookies != null)
conn.setRequestProperty("Cookie",
TextUtils.join(";", cookies));
os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(postData.getPostData());
writer.flush();
writer.close();
is = conn.getInputStream();
BufferedReader r = new BufferedReader(
new InputStreamReader(is));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
result = total.toString();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
}
}
if (conn != null) {
conn.disconnect();
}
}
return result;
}
稍微更新:显然eclipse调试骗了我,在netbeans上运行和调试显示POST
连接。错误似乎与我传递给网址的参数有关。
答案 0 :(得分:1)
FileNotFoundException
表示您发布到的URL不存在,或者无法映射到servlet。它是HTTP 404状态代码的结果。
如果不同意程序的行为,请不要担心调试器中的内容。如果确实未启用doOutput
,则会获得输出流的异常。