2016-05-13 26 views
1

Ich brauche einen Json POST von Android zu Webserver mit PHP senden. Ich probiere viele Codes aus, aber funktioniert nicht.Fehler 404, wenn POST empfangen

Jetzt versuche ich einen einfachen POST mit Postman, mit und ohne Daten senden. Und immer einen 404 Fehler erhalten. Wenn ich Daten mit GET sende, funktioniert die Seite gut.

die PHP-See, denn wenn Sie wollen Test:

web: http://gclimb.com/Androidphp/index.php

<?php 
$json = file_get_contents('php://input'); 
$obj = json_decode($json); 
echo $obj["username"]; 
echo $obj["pass"]; 

if ($_POST["username"]) { 
echo $_POST["username"]; 
} 
if ($_GET["username"]) { 
echo $_GET["username"]; 
} 

?> 

EDIT

POSTMAN screen

404 Fehler:

POST /androidphp/index.php HTTP/1.1 Host: gclimb.com Cache-Steuerung: no-cache Postbote-Token: de575030-0343-64d9-fce3-e640ce12780c Inhaltstyp: multipart/form-data; boundary = ---- ---- WebKitFormBoundary7MA4YWxkTrZu0gW Erhalten Sie Fehler 404

Adaequat:

GET /androidphp/index.php HTTP/1.1 Host: gclimb.com Cache-Control: no-cache Postman-Token: f2999796-9338-6ef6-9877-075be9a8e530

+0

Für mich Postbote gibt immer richtigen Wert ... entweder in POST und GET. – RaV

+0

Ersetzen Sie $ obj ["username"] durch '$ obj -> username' und versuchen Sie es erneut. –

+0

@RaV, wirklich ?? Ich wähle nur POST-Typ, und URL hinzufügen, und 404 Fehler-_- 'das gleiche zurück mit: gclimb.com/androidphp/index.php?username=Myname (POST-Typ) – Cofeina

Antwort

0

Hier werde ich eine komplette PHP bieten und ein Android-Anwendungsdaten von Android-Anwendung an den Server zu senden.

Angenommen, Sie diese Tabelle in Ihrer Datenbank haben:

------------------------ 
| movie_id | movie_name| 
------------------------ 

1- PHP-Skript

<?php 
$servername="localhost"; 
$username="root"; 
$password=""; 
$db="derar"; 
$connection=mysqli_connect($servername,$username,$password,$db); 
$json = file_get_contents('php://input'); 
$obj = json_decode($json,true); 
$movie_name=$obj['movie_name']; 
mysqli_query($connection,"insert into movie (movie_id, movie_name) VALUES (NULL,'$movie_name');"); 
echo "inserted"; 
?> 

dieser Code ist einfacher Code, haben Sie eine SQL-Injektion zu setzen.

2-Applikation für Android

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.win7.derar.MainActivity"> 

    <Button 
     android:id="@+id/send_button" 
     android:layout_width="match_parent" 
     android:text="إضغط لإرسال المعلومات" 
     android:layout_height="wrap_content" /> 
</RelativeLayout> 

MainActivity

public class MainActivity extends AppCompatActivity { 
    private Button send_button; 
    private String Server_URL="http://192.168.1.101/derar/insertDataToServer.php"; 
    private String movie_name="Titanic"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     send_button=(Button)findViewById(R.id.send_button);// Button Assignment 
     send_button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       SendDataToServer sendDataToServer=new SendDataToServer(); 
       sendDataToServer.execute(Server_URL,movie_name); 


      } 
     });// Button On Click Listener 
    } 


    private class SendDataToServer extends AsyncTask<String, Void, Boolean> { 

     @Override 
     protected Boolean doInBackground(String... urls) { 

      OutputStream os = null; 
      InputStream is = null; 
      HttpURLConnection conn = null; 


      try { 

       URL url = new URL(urls[0]); 
       JSONObject jsonObject = new JSONObject(); 
       jsonObject.put("movie_name", urls[1]); 
       String message = jsonObject.toString(); 
       Log.d(message, "Test"); 
       conn = (HttpURLConnection) url.openConnection(); 
       conn.setReadTimeout(10000); 
       conn.setConnectTimeout(15000); 
       conn.setRequestMethod("POST"); 
       conn.setDoInput(true); 
       conn.setDoOutput(true); 
       conn.setFixedLengthStreamingMode(message.getBytes().length); 

       conn.setRequestProperty("Content-Type", "application/json; charset=utf-8"); 
       conn.setRequestProperty("X-Requested-With", "XMLHttpRequest"); 

       conn.connect(); 

       os = new BufferedOutputStream(conn.getOutputStream()); 
       os.write(message.getBytes()); 

       os.flush(); 

       is = conn.getInputStream(); 


      } catch (MalformedURLException e) { 
       Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); 
       ; 
       e.printStackTrace(); 
       return false; 
      } catch (IOException e) { 
       Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); 
       ; 
       e.printStackTrace(); 
       return false; 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } finally { 

       try { 
        assert os != null; 
        os.close(); 
        assert is != null; 
        is.close(); 

       } catch (IOException e) { 

        e.printStackTrace(); 
       } 

       conn.disconnect(); 
      } 


      return true; 
     } 


     @Override 
     protected void onPostExecute(Boolean result) { 
      if (result) { 


        Toast.makeText(getApplicationContext(), "لقد نجح إرسال المعلومات", Toast.LENGTH_LONG).show(); 
      } else { 
       Toast.makeText(getApplicationContext(), "فشل في إرسال المعلومات", Toast.LENGTH_LONG).show(); 

      } 

     } 
    } 
} 

Und vergessen Sie nicht tun sollten:

1- diese Berechtigung Datei hinzufügen zu manifestieren:

<uses-permission android:name="android.permission.INTERNET" /> 

2- ändern die IP-Adresse von diesem Server_URL="http://192.168.1.101/derar/insertDataToServer.php";

an Ihre eigene IP-Adresse, um den localhost-Server auszuführen.

Ich hoffe, dass dies für Sie nützlich wäre.

+0

Vielen Dank @SubhiMMM !! Arbeiten perfekt. Wie machst du die PHP-Antwort? ("Echo" eingefügt ";"). – Cofeina

+0

Bitte geben Sie weitere Informationen über (Wie bekomme ich die PHP-Antwort?). – SubhiMMM

0

Wenn ein POST request machen, vergessen Sie nicht, dass der Antrag Pfad ist case-sensitive!

Probieren Sie Ihre Anfrage mit diesem Ziel auszuführen:

http://gclimb.com/androidphp/index.php