2017-06-09 2 views
0

Ich verstehe den Unterschied nicht, ich habe ein Beispiel codiert, bei dem meine Anwendung Benutzernamen und Passwort an den Server sendet, indem eine POST-Anfrage mit Retrofit2 verwendet wird.Warum Retrofit2 mit @Field und nicht mit @Body für POST-Anfragen funktioniert

ich zum ersten Mal versucht, die Anfrage mit @Body-Tag in der Interface-Methode zu senden: `

@POST("/testproject/login.php") 
Call<TestResponse> sendUsernamePassword(@Body UserData userData); 

Aber mein login.php reagierte ohne Body-Tags (Benutzername, Passwort) übermittelt.

Dann wechsle ich die Methode Anforderung mit FormEncoding senden:

@FormUrlEncoded 
@POST("/testproject/login.php") 
Call<TestResponse> sendUsernamePassword(@Field("username")String username, 
             @Field("password")String password); 

Und es begann zu arbeiten, aber ich verstehe nicht, warum Nachrüstung nicht Post-Anforderung mit @Body Anmerkung schicken könnte.

Hier ist login.php Datei

<?php 

    if (isset($_POST['username']) && isset($_POST['password'])) { 

     $response['status'] = 'success'; 
     $response['username'] = $_POST['username'] . " received"; 
     $response['password'] = $_POST['password'] . "received"; 

     echo json_encode($response); 
    } else { 
     $response['status'] = 'failure'; 
     echo json_encode($response); 
    } 

?> 

Kann jemand erklären, was der Unterschied ist und wie sie behoben werden?

Antwort

2

@Body - Sendet Java-Objekte als Anfragetext.

@Field - Senden Sie Daten als Form-Urlencodiert. Der @ Field-Parameter funktioniert nur mit einem POST.

Um POST json Körper in PHP zu lesen, können Sie den folgenden Code verwenden:

//Get the request body 
$inputJSON = file_get_contents('php://input'); 
//Convert into array 
$input = json_decode($inputJSON, TRUE); 

$username = $input['username']; 
$password = $input['password']; 
+0

ist es trotzdem kann ich Kontrollen stellen, ob die Daten, die von 'file_get_contents empfangen wird ('php: // input ') 'und wie stelle ich sicher, dass diese Methode nicht jedes Mal aufgerufen wird, wenn ich auf die URL klicke. Ich bin sehr neu, damit ein wenig Hilfe geschätzt wird, danke. – yousafkh

Verwandte Themen