1

I am trying to send the POST data from java to a PHP page. However it is not working. Whatever I echo in the php page works fine but when I send data it gives- 'undefined index' What could be the problem ? This is my java file.

import java.net.*;
import java.io.*;

class Main {
public static void main(String args[]) throws IOException {

    URL url = new URL("http://localhost/CD/user/test");
    String result = "";
    String data = "fName=" + URLEncoder.encode("Atli", "UTF-8");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    try {

        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setUseCaches(false);
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded");

        // Send the POST data
        DataOutputStream dataOut = new DataOutputStream(
                connection.getOutputStream());
        dataOut.writeBytes(data);
        dataOut.flush();
        dataOut.close();

        BufferedReader in = new BufferedReader(new InputStreamReader(
                url.openStream()));

        String g;
        while ((g = in.readLine()) != null) {
            result += g;
        }
        in.close();

    } finally {
        connection.disconnect();
        System.out.println(result);
    }

}
}

And here is my php controller:

public function test(){

    $test=$_POST['fName'];
    $all="This is a ";
    $all=$all." ".$test;
    echo $all;



}  

When I just send a url request , I get the ouput as 'This is a'. So it is connecting to the url and everything but while sending data, it is not working. Please help! Thank you.

2 Answers 2

2

You are using different streams for posting and getting. Your post code works fine.

replace:

 BufferedReader in = new BufferedReader(new InputStreamReader(
            url.openStream())); // different stream

with

DataInputStream in = new DataInputStream (connection.getInputStream ()); // same connection

And it should work fine.

// edit: here without any deprecated methods:

    BufferedReader in = null;
    try {
        String line;
        in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        while ((line = in.readLine()) != null) {
            result += line;
        }
    } finally {
        if (in != null) {
            in.close();
        }
    }
Sign up to request clarification or add additional context in comments.

2 Comments

Oh ! Thank you very much ! It works fine now. Btw when I do: in.readLine() it says that the method is deprecated in DataOutputStream and should be replaced with BufferedReader line that I originally used. So how to solve this issue ? Also how to send POST data using bufferedReader instead of DataOutputStream. Your help is much appreciated ! :)
You are right. I added a solution without deprecated methods. As to Post using BufferedReader: I do not think that that is possible (I could be wrong, but after all it is a Reader, not a Writer)
0

You are clearly specifying that you're sending data using GET in Java, but you're reading POST data in PHP.

Java(16):  connection.setRequestMethod("GET");
PHP(3):     $test=$_POST['fName'];

You will need to change one of them, so they both use either POST or GET.

1 Comment

Oh sorry, I was trying it with GET. Its not working either way- GET or POST.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.