2016-05-13 11 views
1

アンドロイドからPHPでjson POSTをWebサーバーに送信する必要があります。私はたくさんのコードを試しますが、うまくいきません。POSTを受信したときにエラー404が発生する

今私は、送信データの有無にかかわらず、郵便番号付きの単純なPOSTを試しています。常に404エラーが表示されます。 GETを使ってデータを送信すると、ページは正常に動作します。

テストしたい場合のために、PHPを参照してください。

ウェブ: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エラー:

をPOST /androidphp/index.php HTTP/1.1ホスト:gclimb.comキャッシュ制御:no-cache郵便番号 - トークン:de575030-0343-64d9-fce3-e640ce12780cコンテンツタイプ:multipart/form-data;細かい境界= ---- WebKitFormBoundary7MA4YWxkTrZu0gW ----取得404エラー

仕事:

GET /androidphp/index.php HTTP/1.1 ホスト:gclimb.com のCache-Control:キャッシュなし ポストマン・トークン:f2999796-9338-6ef6-9877-075be9a8e530

+0

私にとっては、POSTマンはPOSTとGETのどちらでも正しい値を返します。 – RaV

+0

$ obj ["username"]を '$ obj - > username'に置き換えて、やり直してください。 –

+0

@RaV、本当に?? POSTタイプを選択してURLを追加し、404エラーを返します。-_- 'gclimb.com/androidphp/index.php?username=Myname(POSTタイプ) – Cofeina

答えて

0

ここで私は完全なPHP、サーバにアンドロイドアプリケーションからのデータを送信するためのAndroidアプリケーションを提供します。

は、データベースにこのテーブルがあるとします。

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

の1- PHPスクリプト

<?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"; 
?> 

は、このコードは単純なコードでは、SQLインジェクションを配置する必要があります。

2- 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(); 

      } 

     } 
    } 
} 

そして、やることを忘れないでください:

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

2 - 変更:

1-ファイルをマニフェストには、この権限を追加このIPアドレスはです

ローカルホストサーバーを実行するには、自分のIPアドレスに割り当てます。

私はこれがあなたに役立つことを願っています。

+0

ありがとう@SubhiMMM!完璧に働きなさい。あなたはどのようにPHPの応答を取得するのですか? (「エコー」が挿入された「;」)。 – Cofeina

+0

(PHPレスポンスを取得するにはどうすればいいですか?) – SubhiMMM

0

POST requestをする場合、要求パスは大文字と小文字を区別であることを忘れないでください!

はこのターゲットであなたの要求を実行するために試してみてください:

http://gclimb.com/androidphp/index.php 
関連する問題