繁体   English   中英

PHP从Java接收POST请求

[英]PHP receiving a POST request from Java

编辑:这是我的网站日志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应用程序发送发布请求:

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数据库中。

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

从表面上看,您的Java和PHP都看起来“确定”。

强烈建议:

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

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

检查错误(您的请求很可能没有任何错误-但是您应该在Apache错误日志中看到某些内容。

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

用“ phpinfo();”写一个“ hello world”页面 是执行此操作的好方法。

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

编写一个“ hello world” PHP页面以验证您可以进行以下操作:1)连接,2)进行查询,以及3)在Web浏览器中回显查询。

4)验证您可以成功读取从客户端获得的“ $ _POST [帐户]”值。

5)到那时,您应该能够:

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

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

希望对您有所帮助。请回传您可能遇到的任何具体问题。

您尚未告诉客户端代码这是POST请求。 默认情况下,它可能会执行GET。

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

似乎您没有在HttpUrlConnection上设置request方法,默认值为GET。 您需要类似

request.setRequestMethod("POST");

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM