0

これは、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");
?>

これは、コマンドラインで実行したときに得られる出力です。 ここに画像の説明を入力

4

1 に答える 1

0

flush後にAwriteが必要です。

 out.flush();

編集

未定義のインデックス: fName

php エラーは明らかですよね。配列には$_POSTPOST 変数が含まれていません。

最初に、php 側で投稿の内容を次のようにチェックしました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: 0body

あなたのコードに似たものへのグーグルはほとんどありませんが、flushその意味OutputStreamWriterがバッファリングされており、投稿リクエストの時点で、出力書き込まれなかった (サーバーに送信された) か、部分的にしか出力されていないことに気付きました。

conn.setRequestPropertyこの時点で、 forを使用する必要はないと思います"Content-Length"。バッファ コンテンツの長さに応じて更新する必要があります。

于 2013-09-29T07:37:37.640 に答える