যাদের পিএইচপি পৃষ্ঠায় অনুরোধটি পেতে সমস্যা হচ্ছে For _POST ব্যবহার করে কারণ আপনি কী-মূল্যের জোড় আশা করছেন:
সমস্ত উত্তর যেখানে খুব সহায়ক, যদিও আমার কোন স্ট্রিংটি পোস্ট করা উচিত তা সম্পর্কে কিছু প্রাথমিক বোঝার অভাব ছিল, যেহেতু পুরানো অ্যাপাচে এইচটিটিপি ক্লায়েন্টে আমি ব্যবহার করেছি
new UrlEncodedFormEntity(nameValuePairs); (Java)
এবং তারপরে পিএইচপি-তে $ _POST ব্যবহার করতে পারলে কী-মান জোড়া পাওয়া যায়।
আমার বুঝতে এখন পোস্ট করার আগে একজন নিজেই সেই স্ট্রিংটি তৈরি করেছে। সুতরাং স্ট্রিংয়ের মতো দেখতে প্রয়োজন
val data = "key1=val1&key2=val2"
তবে পরিবর্তে কেবল এটি পোস্ট করা url- এ যুক্ত করুন (শিরোনামে)।
বিকল্পটি পরিবর্তে একটি জসন-স্ট্রিং ব্যবহার করা হবে:
val data = "{\"key1\":\"val1\",\"key2\":\"val2\"}" // {"key1":"val1","key2":"val2"}
এবং এটিকে _P _POST ছাড়াই পিএইচপি তে টানুন:
$json_params = file_get_contents('php://input');
// echo_p("Data: $json_params");
$data = json_decode($json_params, true);
এখানে আপনি কোটলিনে একটি নমুনা কোড পাবেন:
class TaskDownloadTest : AsyncTask<Void, Void, Void>() {
override fun doInBackground(vararg params: Void): Void? {
var urlConnection: HttpURLConnection? = null
try {
val postData = JsonObject()
postData.addProperty("key1", "val1")
postData.addProperty("key2", "val2")
// reformat json to key1=value1&key2=value2
// keeping json because I may change the php part to interpret json requests, could be a HashMap instead
val keys = postData.keySet()
var request = ""
keys.forEach { key ->
// Log.i("data", key)
request += "$key=${postData.get(key)}&"
}
request = request.replace("\"", "").removeSuffix("&")
val requestLength = request.toByteArray().size
// Warning in Android 9 you need to add a line in the application part of the manifest: android:usesCleartextTraffic="true"
// /programming/45940861/android-8-cleartext-http-traffic-not-permitted
val url = URL("http://10.0.2.2/getdata.php")
urlConnection = url.openConnection() as HttpURLConnection
// urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded") // apparently default
// Not sure what these are for, I do not use them
// urlConnection.setRequestProperty("Content-Type", "application/json")
// urlConnection.setRequestProperty("Key","Value")
urlConnection.readTimeout = 5000
urlConnection.connectTimeout = 5000
urlConnection.requestMethod = "POST"
urlConnection.doOutput = true
// urlConnection.doInput = true
urlConnection.useCaches = false
urlConnection.setFixedLengthStreamingMode(requestLength)
// urlConnection.setChunkedStreamingMode(0) // if you do not want to handle request length which is fine for small requests
val out = urlConnection.outputStream
val writer = BufferedWriter(
OutputStreamWriter(
out, "UTF-8"
)
)
writer.write(request)
// writer.write("{\"key1\":\"val1\",\"key2\":\"val2\"}") // {"key1":"val1","key2":"val2"} JsonFormat or just postData.toString() for $json_params=file_get_contents('php://input'); json_decode($json_params, true); in php
// writer.write("key1=val1&key2=val2") // key=value format for $_POST in php
writer.flush()
writer.close()
out.close()
val code = urlConnection.responseCode
if (code != 200) {
throw IOException("Invalid response from server: $code")
}
val rd = BufferedReader(
InputStreamReader(
urlConnection.inputStream
)
)
var line = rd.readLine()
while (line != null) {
Log.i("data", line)
line = rd.readLine()
}
} catch (e: Exception) {
e.printStackTrace()
} finally {
urlConnection?.disconnect()
}
return null
}
}
http://example.com/index.php
)