Avatar billede Mik2000 Professor
01. september 2018 - 21:05 Der er 3 kommentarer og
1 løsning

PHP curl API multidimensional array

Håber der er en klog person med kendskab til PHP, JSON og API der kan hjælpe lidt her

Jeg forsøger at lave en simpel API hvor man kan indsætte, men har problemer med POST fordi der skal medsende et multidimensional array

Jeg har et multidimensional  array
$array = array(
    "id" => 1,
    "name" => "Kim",
    "item" => [
        "itemId" => 1,
        "itemName" => "Item 1"
    ]
);

Hvis jeg sender til service med curl, så kan jeg godt få fat i id og name via $_POST - item kan også hentes, men står som en string kaldet array (arrayet kommer ikke med) - ser ud til det er noget med curl ikke understøtter multidimensional arrays.

Jeg har prøvet at json_encode $array inden det sendes og så json_decode når den modtages med POST, men det virker heller ikke.

Hvad gør jeg galt, eller hvad skal jeg gøre i stedet?
Er der noget der er grundlæggende galt i min service?
Avatar billede Mik2000 Professor
01. september 2018 - 21:20 #1
Okay fik det vist løst

Sender det som Content-Type: application/json med CURLOPT_HTTPHEADER

Henter det med: json_decode(file_get_contents('php://input'), true);
Avatar billede arne_v Ekspert
01. september 2018 - 23:58 #2
Jeg synes slet ikke at det er klart hvad problemet er.

Som beskrevet ville jeg bare lave:

server:


<?php
$array = array(
    'id' => 1,
    'name' => 'Kim',
    'item' => array(
        'itemId' => 1,
        'itemName' => 'Item 1'
    )
);
echo json_encode($array);
?>


client:


<?php
$url = 'http://localhost:81/service.php';
$array = json_decode(file_get_contents($url));
print_r($array);
?>
Avatar billede arne_v Ekspert
02. september 2018 - 00:01 #3
OK.

En:

headers('Content-Type: application/json');

i toppen af server ville naturligvis vaere paent.

Men stadigvaek.
Avatar billede Mik2000 Professor
03. september 2018 - 12:26 #4
Hej

Det er en api som tager imod noget input via post.

Denne vil vel skulle køres på en eller anden måde
$url = 'http://localhost:81/service.php';
$array = json_decode(file_get_contents($url));
print_r($array);

Men i mit tilfælde vil servicen blive kaldt med f.eks. curl og post, og når det sker skal den tage data og behandle.
Men når man via curl sendte et multidimensionelt array så fejlede den. Men ved at json encode og lave header med json, og så  bruge følgende til at modtage
json_decode(file_get_contents('php://input'), true);
så ser det ud til at virke
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester