$ _POST का उपयोग करके php पेज पर अनुरोध प्राप्त करने में परेशानी वाले लोगों के लिए, क्योंकि आपको कुंजी-मूल्य वाले जोड़े की उम्मीद है:
हालांकि सभी उत्तर जहां बहुत उपयोगी थे, मुझे कुछ बुनियादी समझ की कमी थी, जिस पर वास्तव में पोस्ट करने के लिए स्ट्रिंग थी, क्योंकि पुराने अपाचे HttpClass में मैंने इस्तेमाल किया था
new UrlEncodedFormEntity(nameValuePairs); (Java)
और उसके बाद $ _POST का उपयोग php में की-वैल्यू जोड़े के लिए किया जा सकता है।
मेरी समझ से अब किसी ने पोस्ट करने से पहले मैन्युअल रूप से उस स्ट्रिंग का निर्माण किया है। तो स्ट्रिंग को देखने की जरूरत है
val data = "key1=val1&key2=val2"
लेकिन केवल इसे url में जोड़ने के बजाय इसे (हेडर में) पोस्ट किया जाता है।
विकल्प इसके बजाय एक json-string का उपयोग करना होगा:
val data = "{\"key1\":\"val1\",\"key2\":\"val2\"}" // {"key1":"val1","key2":"val2"}
और $ _POST के बिना php में इसे खींचें:
$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
)