PHP从Java接收POST请求

时间:2012-01-27 22:47:23

标签: java php post web httpurlconnection

编辑:这是我的网站日志中显示的内容 xx.xx.xxx.xx - [27 / Jan / 2012:17:42:24 -0500]“POST /dir/addData2.php HTTP / 1.1”200 - www.mywebsites.com“ - ”“Java / 1.7 .0“” - “

我正在1& 1托管我的网站,我希望有一个页面blank.php应该接受POST请求并将其上传到我的数据库。我想我正在发送我的POST,并且我不知道我在我的网站上正确处理它。因为没有任何内容插入我的数据库。响应的内容长度为0,但即使我发送一个字符串长度的标题,它也不会改变。另一个选择是主持人不允许我做远程发布请求(仍在等待回复)。

我从这样的Java应用程序发送post请求:

URL url = new URL("www.mywebsite.com/blank.php");    
HttpURLConnection request = (HttpURLConnection)url.openConnection();
request.setRequestProperty("Content-type","application/x-www-form-urlencoded");
request.setRequestMethod("POST");
OutputStreamWriter post = new OutputStreamWriter(request.getOutputStream());
String data = URLEncoder.encode("account", "UTF-8") + "=" + URLEncoder.encode(message[0], "UTF-8");
data += "&" + URLEncoder.encode("message", "UTF-8") + "=" + URLEncoder.encode(message[2], "UTF-8");
data += "&" + URLEncoder.encode("type", "UTF-8") + "=" + URLEncoder.encode(message[0], "UTF-8");
post.write(data);
post.flush();
/*
/ String example
/account=103&message=Feller+1391.88+0&type=103
*/

服务器的响应是:

null=[HTTP/1.1 200 OK]
Date=[Fri, 27 Jan 2012 21:59:10 GMT]
Content-Length=[0]
Keep-Alive=[timeout=2, max=200]
Connection=[Keep-Alive]
Content-Type=[text/html]
Server=[Apache]
X-Powered-By=[PHP/5.2.17]

我的网页上有这个基本的PHP代码(现在,以后会改进/检查)

$link = mysql_connect($hostname, $username, $password);
$db_selected = mysql_select_db($database, $link);
$query = "INSERT INTO newData(account, message, type) VALUES('$_POST[account]', '$_POST[message]', '$_POST[type]')";
mysql_query($query) || die();

我想指出我没有私人服务器,稍后我可能会使用http://hc.apache.org/httpcomponents-core-ga/examples.html。现在我只想从我的Java应用程序发送一个字符串,用PHP接收它并插入MySQL数据库。

3 个答案:

答案 0 :(得分:2)

是的,我确定您的ISP允许“发布”和“获取”HTTP服务器请求。

表面上看,你的Java和PHP看起来都还不错。

强烈建议:

1)检查服务器上的Apache日志。

确保请求到达(可能已经到了)。

检查错误(您的请求可能没有 - 但您应该在Apache错误日志中看到SOMETHING。

2)验证PHP是否正常工作。

使用“phpinfo();”编写“hello world”页面这是一个很好的方法。

3)验证MySQL是否正常工作。

编写“hello world”PHP页面以验证您是否可以1)连接,2)进行查询,以及3)在您的Web浏览器中回显查询是理想的。

4)确认您可以成功阅读您从客户端获得的“$ _POST [account]”值。

5)此时,你应该能够:

a)让客户与您的服务器进行通信

b)阅读帖子请求并将其写入您的数据库

'希望有所帮助..并且请回复您可能遇到的任何具体问题。

答案 1 :(得分:1)

您尚未告知客户端代码这是一个POST请求。它可能会默认执行GET。

url = new URL(targetURL);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");

答案 2 :(得分:1)

看起来您没有在HttpUrlConnection上设置请求方法,默认为GET。你需要像

这样的东西
request.setRequestMethod("POST");

如果这不起作用,我会考虑从一开始就使用Apache HTTP客户端,它比Java的标准HTTP客户端API更容易使用。