这是我通过HTTPPost请求发送数据的java代码:
import java.io.*;
import java.net.*;
class HttpURLConnectionEx{
public static void main(String[] args) throws Exception{
URL targetURL = new URL("http://localhost/JAVA/post.php");
HttpURLConnection conn =(HttpURLConnection) targetURL.openConnection();
String body= "fName="+ URLEncoder.encode("value1","UTF-8")+"&lName=" + URLEncoder.encode("value2","UTF-8");
conn.setDoOutput(true);
conn.setInstanceFollowRedirects(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("charset", "UTF-8");
conn.setRequestProperty("Content-Length", Integer.toString(body.length()));
try
{
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
out.write(body);
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line = rd.readLine()) != null) {
System.out.println(line);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
这是我在localhost中的PHP代码:
<?php
$data = $_POST["fName"];
$dbc = mysqli_connect('localhost','root','root123','JAVA')
or die("error connecting to mysql server");
$query = "INSERT INTO insert_table(data) VALUES('".$data."')";
if($query){
echo "data inserted sucessfully";
}
$result = mysqli_query($dbc,$query) or die("error querying database");
?>
这是我在命令行中运行时获得的输出:
答案 0 :(得分:0)
需要flush
后write
。
out.flush();
修改强>
未定义的索引:fName
php错误很清楚,不是吗? $_POST
数组不包含POST变量。
首先,我使用var_dump($_POST)
和
/* save the raw post to a file */
file_put_contents('/tmp/post.txt', file_get_contents('php://input'));
两者都是空的,因此我使用wireshark来检查HTTP / POST内容,但已完成但Content-Length: 0
且没有body
。
很少谷歌搜索类似于您的代码的东西,我注意到flush
表示OutputStreamWriter
被缓冲,并且在发布请求时输出可能未被写入(发送到服务器)或仅部分,这是零内容长度的一个很好的理由。
此时我认为您不需要conn.setRequestProperty
使用"Content-Length"
,它应该根据您的缓冲区内容长度进行更新。