我正在尝试使用一些 POST 参数向服务器发出请求,我使用了在这里找到的一些代码:Using java.net.URLConnection to fire and handle HTTP requests
问题是当我在服务器上的 php 页面上写出所有值时,所有值都变为“0”,除了 ssn 中的第一个数字。此外,我返回到 java 代码的响应在标头的“content-type”成员中没有“charset=UTF-8”。但正如您在 php/html 代码中看到的那样,我不会在任何地方更改标题。
安卓代码:
public static String testCon()
{
String url = "http://xxx.xxx.se/postReciverTest.php";
String charset = "UTF-8";
String param1 = "Test";
String param2 = "Test2";
String param3 = "123456-7899";
// ...
String query = null;
try
{
query = String.format("fname=%s&sname=%s&ssn=%s",
URLEncoder.encode(param1, charset),
URLEncoder.encode(param2, charset),
URLEncoder.encode(param3, charset));
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
URLConnection connection = null;
try {
connection = new URL(url).openConnection();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
connection.setDoOutput(true); // Triggers POST.
connection.setRequestProperty("Accept-Charset", charset);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);
OutputStream output = null;
try {
try {
output = connection.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
try {
output.write(query.getBytes(charset));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} finally {
if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
}
InputStream response = null;
try {
response = connection.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
int status;
try {
status = ((HttpURLConnection) connection).getResponseCode();
} catch (IOException e) {
e.printStackTrace();
}
for (Entry<String, List<String>> header : connection.getHeaderFields().entrySet()) {
System.out.println(header.getKey() + "=" + header.getValue());
}
String contentType = connection.getHeaderField("Content-Type");
charset = null;
for (String param : contentType.replace(" ", "").split(";")) {
if (param.startsWith("charset=")) {
charset = param.split("=", 2)[1];
break;
}
}
charset = "UTF-8"; //this is here just because the header don't seems to contain the info and i know that the charset is UTF-8
String res = "";
if (charset != null) {
BufferedReader reader = null;
try {
try {
reader = new BufferedReader(new InputStreamReader(response, charset));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
for (String line; (line = reader.readLine()) != null;) {
// ... System.out.println(line) ?
res += line;
}
} catch (IOException e) {
e.printStackTrace();
}
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}
} else {
// It's likely binary content, use InputStream/OutputStream.
}
return null;
}
我将请求发送到的页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
Test
<?
echo $_POST["fname"] + "<br />";
echo $_POST["sname"] + "<br />";
echo $_POST["ssn"] + "<br />";
?>
</body>
</html>
所以我在“res”变量中得到的结果是带有“00123456”的html代码:“Test Test2 123456-7899”
这不是我的领域,所以如果答案相当容易理解会很好:)
提前致谢!