【发布时间】:2014-10-14 19:39:25
【问题描述】:
我有一个 android 应用程序向包含一些 NameValuePairs 的服务器发出 HTTP post 请求,它在任何 wifi 网络上都可以正常工作,但是当我在 3g 上使用相同的 http post 时,服务器会收到一个带有空的身体。这是请求的代码
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
3);
nameValuePairs.add(new BasicNameValuePair("Name", params[0]));
nameValuePairs.add(new BasicNameValuePair("DNI", params[1]));
nameValuePairs.add(new BasicNameValuePair("Token", params[2]));
URL url = new URL(URL_SERVER);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setReadTimeout(30000);
conn.setConnectTimeout(50000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(nameValuePairs));
writer.flush();
writer.close();
os.close();
conn.connect();
int responseCode = conn.getResponseCode();
BufferedReader in;
if (responseCode == 404)
in = new BufferedReader(new InputStreamReader(
conn.getErrorStream()));
else
in = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
这里是getQuery方法的代码
private String getQuery(List<NameValuePair> params)
throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (NameValuePair pair : params) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
}
return result.toString();
}
知道为什么会这样吗?
我有新信息。我制作了一个表格,通过网络浏览器发送 http 帖子。这种形式效果很好,可以在 Windows 手机和 wifi 上通过 3g 完美发送身体。但是,当我尝试使用超过 3g 的 android 手机的 chrome 发送 http 帖子时,它是空的,而且如果我尝试从连接到我的 android 手机热点的一台计算机发送 http 帖子,它会失败。当我尝试使用连接到 wifi 网络的同一台计算机时,完全没有问题。这太奇怪了。想法?
【问题讨论】:
-
不用了,谢谢。有什么问题吗?