PHP HTTP POST on Android device using HttpURLConnection

Question:

So the problem is that this is not a message to the online database hosted by goDaddy. So my question is why, and how can I fix this to publish it?

Question: The php page does not receive the name value pairs passed to it.

Edit:

The modified code on the proposal to use HttpURLConnection ... I narrowed down the problem so as not to get fbid.

As you can tell, I did a lot of my homework here ... Here is my logarithm of what is set in the postthread class. Here is my class that makes the message:

07-02 16:41:45.108: I/PROJECTCARUSO(12308): response: {"posts":[null]} 

HttpPostThread:

 public class HttpPostThread extends Thread { public static final int FAILURE = 0; public static final int SUCCESS = 1; private URL url; ArrayList<NameValuePair> pairs; public HttpPostThread(URL sERVICE_URL, ArrayList<NameValuePair> pairs, final Handler handler) { Log.i("PROJECTCARUSO", "Posting to URL: " + sERVICE_URL); this.url =sERVICE_URL; this.pairs = pairs; if(pairs==null){ Log.i("PROJECTCARUSO", "URL parms were null"); this.pairs = new ArrayList<NameValuePair>(); } } @Override public void run() { try { HttpURLConnection conn; String param=""; for (NameValuePair nvp : pairs) { //you need to encode ONLY the values of the parameters if (param == "") { param=nvp.getName() + "=" + URLEncoder.encode(nvp.getValue(),"UTF-8"); } else { param+= "&" + nvp.getName() + "=" + URLEncoder.encode(nvp.getValue(),"UTF-8"); } } Log.i("PROJECTCARUSO", "param: " + param.toString()); // Create connection conn=(HttpURLConnection)url.openConnection(); //set the output to true, indicating you are outputting(uploading) POST data conn.setDoOutput(true); //once you set the output to true, you don't really need to set the request method to post, but I'm doing it anyway conn.setRequestMethod("POST"); //Android documentation suggested that you set the length of the data you are sending to the server, BUT // do NOT specify this length in the header by using conn.setRequestProperty("Content-Length", length); //use this instead. conn.setFixedLengthStreamingMode(param.getBytes().length); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); //send the POST out PrintWriter out = new PrintWriter(conn.getOutputStream()); out.print(param); out.close(); //build the string to store the response text from the server String response= ""; //start listening to the stream Scanner inStream = new Scanner(conn.getInputStream()); //process the stream and store it in StringBuilder while(inStream.hasNextLine()) response+=(inStream.nextLine()); Log.i("PROJECTCARUSO","response: " + response); } //catch some error catch(MalformedURLException ex){ Log.i("PROJECTCARUSO", ex.toString()); } // and some more catch(IOException ex){ Log.i("PROJECTCARUSO", ex.toString()); } } public static boolean isNumeric(String str) { try { double d = Double.parseDouble(str); } catch(NumberFormatException nfe) { return false; } return true; } } 

Here php:

  <?php //Make connection $con = mysqli_connect('...','...','...') ; //check connection if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } //change db to andriodnfp db mysqli_select_db($con, 'andriodnfp'); $table= 'USER'; $id=0; $fbid = htmlspecialchars($_GET["fbid"]); $social = htmlspecialchars($_GET["social"]); $name = htmlspecialchars($_GET["name"]); $name = !empty($name) ? "'$name'" : "NULL"; $fname = htmlspecialchars($_GET["fname"]); $fname = !empty($fname) ? "'$fname'" : "NULL"; $username = htmlspecialchars($_GET["username"]); $username = !empty($username) ? "'$username'" : "NULL"; $email = htmlspecialchars($_GET["email"]); $email = !empty($email) ? "'$email'" : "NULL"; $picture = htmlspecialchars($_GET["picture"]); $picture = !empty($picture) ? "'$picture'" : "NULL"; $other = htmlspecialchars($_GET["other"]); $other = !empty($other) ? "'$other'" : "NULL"; if (!$fbid == '') { if (!mysqli_query($con, 'INSERT INTO '.$table.' ( facebookID, social_outlet, Name, first_name, username, email, picture, significant_other) VALUES ("'.$fbid.'","'.$social.'","'.$name.'","'.$fname.'","'.$username.'","'.$email.'","'.$picture.'","'.$other.'")')) { printf("Errormessage: %s\n", mysqli_error($con)); die(); } else { $posts = array('auto_increment_id'=>mysqli_insert_id($con)); }; } else { printf("Errormessage: %s\n", "Facebook ID was null"); printf("Errormessage: %s\n", $fbid ); printf("Errormessage: %s\n", $social); printf("Errormessage: %s\n", $name); printf("Errormessage: %s\n", $fname); printf("Errormessage: %s\n", $username); printf("Errormessage: %s\n", $email); printf("Errormessage: %s\n", $picture); printf("Errormessage: %s\n", $other); die(); } mysqli_close($con); //$posts = array($json); $posts = array($posts); header('Content-type: application/json'); echo json_encode(array('posts'=>$posts)); ?> 

Apache Logs:

 166.147.72.174 - - [19/Jun/2013:16:47:41 -0700] "POST ...post.php? HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 195224 166.147.72.174 - - [19/Jun/2013:16:49:08 -0700] "POST ...post.php? HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 13848 166.147.72.174 - - [19/Jun/2013:16:50:57 -0700] "POST ...post.php? HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 17899 166.147.72.174 - - [19/Jun/2013:16:52:14 -0700] "POST ...post.php HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 12514 166.147.72.174 - - [19/Jun/2013:16:53:35 -0700] "POST ...post.php HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 15190 166.147.72.174 - - [19/Jun/2013:16:54:56 -0700] "POST ...post.php HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 14373 166.147.72.174 - - [19/Jun/2013:16:56:50 -0700] "POST ...post.php HTTP/1.1" 200 155 "-" "Apache-HttpClient/UNAVAILABLE (java 1.4)" 0 "x-httpd-php5-3" "/var/chroot/home/content/31/9124131/html/android/com.projectcaruso/naturalfamilyplaning/post.php" 12017 

EDIT:

I even tried java like this:

 public void run() { try { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(10000); conn.setConnectTimeout(15000); conn.setRequestMethod("POST"); conn.setDoInput(true); conn.setDoOutput(true); List<NameValuePair> params = new ArrayList<NameValuePair>(); for (NameValuePair nvp : pairs) { //you need to encode ONLY the values of the parameters params.add(new BasicNameValuePair(nvp.getName(), nvp.getValue())); Log.i("PROJECTCARUSO", "NVP: " + nvp.getName() + " - " + nvp.getValue()); } OutputStream os = conn.getOutputStream(); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os, "UTF-8")); writer.write(getQuery(params)); writer.close(); os.close(); conn.connect(); //build the string to store the response text from the server String response= ""; //start listening to the stream Scanner inStream = new Scanner(conn.getInputStream()); //process the stream and store it in StringBuilder while(inStream.hasNextLine()) response+=(inStream.nextLine()); Log.i("PROJECTCARUSO","response: " + response); } catch (ProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 
+6
source share
2 answers

You should use $_POST instead of $_GET everywhere.

+1
source

Suppose you are using apache HttpClient as your DefaultClient.

You need more data on WIRE and HEADER. The Apache documentation shows you how to enable these loggers. read apache docs when registering

an example below of what you will see (u will know exactly what is happening between the client and server).

Full registration in apache HttpClient:

 D/ch.boye.httpclientandroidlib.wire( 1175): >> "PUT /1/classes/Books/8NUX0YP5XK HTTP/1.1[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): >> "Content-Length: 375[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): >> "Content-Type: text/plain; charset=ISO-8859-1[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): >> "Host: api.parse.com[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): >> "Connection: Keep-Alive[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): >> "X-Parse-Application-Id: 3[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): >> "X-Parse-REST-API-Key: kVl9[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): >> "[\r][\n]" D/ch.boye.httpclientandroidlib.headers( 1175): >> PUT /1/classes/Books/8NUX0YP5XK HTTP/1.1 D/ch.boye.httpclientandroidlib.headers( 1175): >> Content-Length: 375 D/ch.boye.httpclientandroidlib.headers( 1175): >> Content-Type: text/plain; charset=ISO-8859-1 D/ch.boye.httpclientandroidlib.headers( 1175): >> Host: api.parse.com D/ch.boye.httpclientandroidlib.headers( 1175): >> Connection: Keep-Alive D/ch.boye.httpclientandroidlib.headers( 1175): >> X-Parse-Application-Id: 3K D/ch.boye.httpclientandroidlib.headers( 1175): >> X-Parse-REST-API-Key: kVl5Z D/ch.boye.httpclientandroidlib.wire( 1175): >> "{"pages":{"__op":"Add","objects":[{"__type":"Pointer","ClassName":"TestVoiceObject","objectId":"bsKyc8mKV7"},{"__type":"Pointer","ClassName":"TestVoiceObject","objectId":"hehlqEUJw8"},{"__type":"Pointer","ClassName":"TestVoiceObject","objectId":"rtbhCb37tq"},{"__type":"Pointer","ClassName":"TestVoiceObject","objectId":"84zjWpJy6y"}]},"ACL":{"*":{"read":true,"write":true}}}" D/ch.boye.httpclientandroidlib.wire( 1175): << "HTTP/1.1 200 OK[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "Access-Control-Allow-Origin: *[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "Access-Control-Request-Method: *[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "Cache-Control: max-age=0, private, must-revalidate[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "Content-Type: application/json; charset=utf-8[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "Date: Mon, 08 Apr 2013 19:51:59 GMT[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "ETag: "172e8ee0c4828b5fce3303c078b8f2ad"[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "Server: nginx/1.2.2[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "Set-Cookie: _parse_session=BAh7BkkiD3d989bfe; domain=.parse.com; path=/; expires=Sat, 08-Apr-2023 19:51:59 GMT; secure; HttpOnly[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "Status: 200 OK[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "X-Runtime: 0.041462[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "X-UA-Compatible: IE=Edge,chrome=1[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "Content-Length: 500[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "Connection: keep-alive[\r][\n]" D/ch.boye.httpclientandroidlib.wire( 1175): << "[\r][\n]" D/class ch.boye.httpclientandroidlib.impl.conn.DefaultClientConnection( 1175): Receiving response: HTTP/1.1 200 OK D/ch.boye.httpclientandroidlib.headers( 1175): << HTTP/1.1 200 OK D/ch.boye.httpclientandroidlib.headers( 1175): << Access-Control-Allow-Origin: * D/ch.boye.httpclientandroidlib.headers( 1175): << Access-Control-Request-Method: * D/ch.boye.httpclientandroidlib.headers( 1175): << Cache-Control: max-age=0, private, must-revalidate D/ch.boye.httpclientandroidlib.headers( 1175): << Content-Type: application/json; charset=utf-8 D/ch.boye.httpclientandroidlib.headers( 1175): << Date: Mon, 08 Apr 2013 19:51:59 GMT D/ch.boye.httpclientandroidlib.headers( 1175): << ETag: "172e8ee0c4828b5fce3303c078b8f2ad" D/ch.boye.httpclientandroidlib.headers( 1175): << Server: nginx/1.2.2 D/ch.boye.httpclientandroidlib.headers( 1175): << Set-Cookie: 
+1
source

Source: https://habr.com/ru/post/947697/


All Articles