簡體   English   中英

$_POST 請求適用於 postman 但不適用於 android 應用程序

[英]$_POST request works with postman but not in android app

我在這個問題上已經有一段時間了,目前正在嘗試將我的 php 腳本轉換為 PDO 但是 $_POST 總是給我 null 時運行 isset。 我在 android 中的代碼可以與我的其他腳本一起正常工作,但是當我將每個項目的 $_POST 更改為 $_REQUEST 並且鏈接看起來也不同時,這個代碼僅適用於 postman。 還值得一提的是 onResponse 和 onFailure 沒有接收/打印任何消息。

Postman URL

http://123.456.7.89/Database/register.php?username=asdfasdf&password=lj4ioidfoislkjsf&email=jalenpauloiudf&tece=true&profilePicPath=aksdfjlakjdsfl&tokenId=as89gwbeg98sd

當前URL

http://123.456.7.89/Database/register.php

腳本

<?php

$servername = "localhost";
$dbUsername = "root";
$dbPassword = "password";
$dbname = "Database";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $dbUsername, $dbPassword);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $username = $_POST['username'];
    $password = $_POST['password'];
    $email = $_POST['email'];
    $termsOfService = $_POST['termsOfService'];
    $profilePicPath = $_POST['profilePicPath'];
    $tokenId = $_POST['tokenId'];
    $userId = uniqId();

    //converting data
    $termsOfService = $termsOfService ? 'true' : 'false';

    //Username check
    $emailForQuery = "%" . $_POST['email'] . "%";
    $userIdForQuery = "%" . $userId . "%";
    $usernameCheckQuery = $conn->prepare("SELECT email, userId FROM users WHERE email LIKE ? OR userId LIKE ? LIMIT 1");
    $usernameCheckQuery->execute([$emailForQuery, $userIdForQuery]); 
    $usernameCheckQuery->fetch();

    if ($usernameCheckQuery->rowCount() == 0) {//username doesnt exist
        $usernameCheckQuery->closeCursor();

        $hashedPassword = password_hash($password, PASSWORD_DEFAULT);
        $query = $conn->prepare("INSERT INTO users(userId, username, password, email, termsOfService, profilePicPath, tokenId) 
            VALUES(?, ?, ?, ?, ?, ?, ?)");
        $query->execute([$userId, $username, $hashedPassword, $email, $termsOfService, $profilePicPath, $tokenId]);
        $query->closeCursor();

        header('Content-type:application/json;charset=utf-8');
        $resArray = ['success' => true, 'userId' => $userId];
        echo json_encode($resArray);

    } else { //username exists
        $usernameCheckQuery->closeCursor();
        connectionError("username already exists");
    }
        
} catch(PDOException $e) {    
    connectionError();
}

function connectionError($message = "database connection error") { //sending response
    header('Content-type:application/json;charset=utf-8');
    $resArray = ['success' => false, 'message' => $message];
    echo json_encode($resArray);
    $conn = null;
}

?>

Android 發布數據

    @FormUrlEncoded
@POST("register.php")
fun signUpUser(@Field("username") username: String,
               @Field("password") password: String,
               @Field("email") email: String,
               @Field("termsOfService") termsOfService: Boolean,
               @Field("profilePicPath") profilePicPath: String,
               @Field("tokenId") tokenId: String): Call<ResponseLoginOrSignUp>

我的猜測是它與網址有關,但又一次沒有發送響應。

如果需要任何其他代碼,請告訴我並添加它,謝謝。

回答!!! 這是我的結論,我的域不安全,需要將 ssl 添加到我的托管域和自定義域中。 對於 ssl,我將 cloudflare 用於尋找免費 ssl 的任何人,因為我花了一段時間才找到合適的站點。 還將 http 切換到 https 中的 url 展示在 ZC31B32364CE19CA8FCD150A41 工作室

在 android 清單中使用 android:usesCleartextTraffic="true"

首先,嘗試將Http更改為https

然后我推薦使用 android 凌空發布請求

https://developer.android.com/training/volley[Android凌空示例] 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM