这是我正在使用的代码。它不是将数据发布到页面,而是像常规文本文件一样下载它。所以,我实际上是在返回html代码并且没有提交表单。
我知道html表单有效。如果我在浏览器中打开它,我可以发布到它,我的数据出现在我的数据库中。我猜我错过了一个参数或其他东西。
public void testComm ()
{
try
{
URL url;
URLConnection urlConn;
DataOutputStream printout;
DataInputStream input;
url = new URL ("http://mysite.com/myform.html");
// URL connection channel.
urlConn = url.openConnection();
// Let the run-time system (RTS) know that we want input.
urlConn.setDoInput (true);
// Let the RTS know that we want to do output.
urlConn.setDoOutput (true);
// No caching, we want the real thing.
urlConn.setUseCaches (false);
// Specify the content type.
urlConn.setRequestProperty
("Content-Type", "application/x-www-form-urlencoded");
// Send POST output.
printout = new DataOutputStream (urlConn.getOutputStream ());
String content =
"txtLevelName=" + URLEncoder.encode ("level1") +
"&txtLevelData=" + URLEncoder.encode ("abcd");
printout.writeBytes (content);
printout.flush ();
printout.close ();
// Get response data.
input = new DataInputStream (urlConn.getInputStream ());
String str;
while (null != ((str = input.readLine())))
{
System.out.println (str);
}
input.close ();
}
catch (MalformedURLException me)
{
System.err.println("MalformedURLException: " + me);
}
catch (IOException ioe)
{
System.err.println("IOException: " + ioe.getMessage());
}
}
答案 0 :(得分:8)
您已经发送了POST请求。它是urlConn.setDoOutput(true)
,它将请求方法设置为POST。显然,您正在将请求发送到错误的网址。在浏览器中打开HTML页面。右键单击并查看源。在HTML源代码中找到HTML <form>
元素。它应该看起来像:
<form action="http://mysite.com/somescript" method="post">
检查其action
属性。这就是您必须发布到的URL。
答案 1 :(得分:3)
可能你做得不对。看起来您将其发布到表单而不是操作。
答案 2 :(得分:2)
我正在做什么(我知道有这样的框架,但我希望它很轻):
final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
if(!postString.isEmpty()) {
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", Integer.toString(postString.getBytes().length));
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
final OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream());
wr.write(postString);
wr.flush();
wr.close();
}
postString与您的内容字符串相同
//编辑:哦和上面提到的sid:你的网址是一个html页面???
答案 3 :(得分:2)
您可以尝试 jsoup :http://jsoup.org/
它非常易于使用:
Document doc = Jsoup.connect("http://example.com")
.data("query", "Java")
.post();
从网址加载文档: http://jsoup.org/cookbook/input/load-document-from-url