Мне нужно отправить json POST из android на веб-сервер с php. Я стараюсь много кодов, но не работает.
Теперь я попробую просто POST с Postman, с и без отправки данных. И всегда получайте ошибку 404. Если я отправлю данные с помощью GET, страница будет работать нормально.
См. Php, если вы хотите проверить:
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"]; } ?>
РЕДАКТИРОВАТЬ
Экран POSTMAN
404 Ошибка:
POST /androidphp/index.php HTTP / 1.1 Host: gclimb.com Cache-Control: no-cache Postman-Token: de575030-0343-64d9-fce3-e640ce12780c Тип контента: multipart / form-data; border = —- WebKitFormBoundary7MA4YWxkTrZu0gW —- Ошибка 404
Прекрасно работайте:
GET /androidphp/index.php HTTP / 1.1 Host: gclimb.com Cache-Control: no-cache Почтовый маркер: f2999796-9338-6ef6-9877-075be9a8e530
Здесь я предоставлю полный PHP и приложение Android для отправки данных из приложения android на сервер.
Предположим, что у вас есть эта таблица в вашей базе данных:
------------------------ | movie_id | movie_name| ------------------------
1- PHP SCRIPT
<?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>
Основная деятельность
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(); } } } }
И не забудьте сделать:
1- добавьте это разрешение для файла манифеста:
<uses-permission android:name="android.permission.INTERNET" />
2- Измените IP-адрес с этого Server_URL="http://192.168.1.101/derar/insertDataToServer.php";
на ваш собственный IP-адрес для запуска локального сервера.
Надеюсь, это будет полезно для вас.
При выполнении POST request
не забывайте, что путь запроса чувствителен к регистру !
Попробуйте выполнить свой запрос с этой целью:
http://gclimb.com/androidphp/index.php