skip to Main Content

During a university project, I’ve built a ReST API with Spring Boot. I’m currently trying to write a client to use my ReST API.

I have this URI to get a "Bearer" token:

enter image description here

When I create an HTTP request within IntelliJ they are working fine, like this:

POST http://localhost:8080/api/newQrCode
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJST0xFX0FETUlOIl0sImV4cCI6MTYxNDYwMTE4Nn0.rPVs-ZYDKiHB1tvWGy0LWTkI8drzsNenLecIVy0-dHs
Content-Type: application/json

{"texteCode" : "Je suis un autre Qr Code", "scoreCode": "1"}

and the result is:

POST http://localhost:8080/api/newQrCode

HTTP/1.1 200 
Set-Cookie: JSESSIONID=35D91AE8B080F7E719BBBBC9DB642614; Path=/; HttpOnly
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: text/plain;charset=UTF-8
Content-Length: 14
Date: Sun, 21 Feb 2021 22:08:57 GMT
Keep-Alive: timeout=60
Connection: keep-alive

Qr Code créé

Response code: 200; Time: 146ms; Content length: 12 bytes

The problem I’m facing is that I have to do a PHP rest client, and I can’t do the post request (getting the token works well):

function test($token){
    $url = "http://localhost:8080/api/newQrCode"; // modifier le produit 1
    $data = "{"texteCode" : "Je suis un autreuhhuhu Qr Code", "scoreCode": "1"}n";

    $data = json_encode(array("texteCode: Je suis un autreuhhuhu Qr Code", "scoreCode : 1"));
    $data = json_encode(array("texteCode" => "Je suis un autreuhhuhu Qr Code", "scoreCode" =>  1));
    $data = json_encode("{"texteCode" : "Je suis un autreuhhuhu Qr Code", "scoreCode": "1"}n");

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: " . $token, "Content-Type: application/json"));
    curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'POST' );
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
    $response = curl_exec($ch);
    var_dump(json_decode($response));
    if (!$response)
    {
        return false;
    }
    return true;
}

During my web research, I had read different ways to pass JSON data, but I didn’t manage to find the right one.

There is this message in the Spring console :

Resolved
[org.springframework.http.converter.HttpMessageNotReadableException:
Required request body is missing:
org.springframework.http.ResponseEntity<java.lang.String>
com.dill.api_rest.controleur.ApiRestControleur.createQrCode(com.dill.api_rest.modele.QrCode)]

Just for the test, I’ve done a version of this POST request with HttpClient in Java and it’s also working very well.

So my question is: Is my problematic feasible with PHP and curl and am I doing it wrong, or should O go with another tool / another tech to do that (like java)?

2

Answers


  1. Chosen as BEST ANSWER

    After more investigations there was a extra empty character in my token string. I removed it and it's working well now.


  2. Try to fix php code a bit:

    data

    $data = json_encode(
      array(
        "texteCode" => "Je suis un autre Qr Code",
        "scoreCode" => 1
      )
    );
    

    header (Bearer is missing?)

    $headers = array(
      'Authorization: Bearer ' . $token,
      'Content-Type: application/json'
    );
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search