Avatar billede nemlig Professor
Oprettet i går kl. 16:22 Der er 8 kommentarer

Curl() og JSON

Hejsa.

Kan nogen forklare mig, hvorfor den første kodestump herunder virker, men ikke den sidste.
I den første benytter jeg ikke JSON, mens jeg gør det i den næste.
I den sidste får jeg fejl på "id"


$data = http_build_query( [
        "id" => $device_id
    ] );

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: application/x-www-form-urlencoded"] );
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);


$data =  [
    "id" => $device_id
] ;

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: application/json"] );
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
Avatar billede arne_v Ekspert
Skrevet i går kl. 16:38 #1
Hvad er den præcise fejl?

Understøtter den web service POST af JSON?
Avatar billede nemlig Professor
Skrevet i går kl. 17:03 #2
Når jeg benytter metode 1, får jeg dette retur:

{ "isok": true, "data": { "scene_id": "1746182188622" } }

Og når jeg benytter metode 2 med JSON, så får jeg dette retur:

{ "isok": false, "errors": { "wrong_id": "Wrong scene id!" } }

Jeg kan også kalde tjenesten via browserens URL med:
https://shelly.com/servernr/scene/manuel_run?auth_key=abcde&id=1746182188622
Så får jeg disse rå data retur:
{
  "isok": true,
  "data": {
    "scene_id": "1746182188622"
  }
}


og headeren viser:
Access-Control-Allow-Headers: X-CustomHeader,Keep-Alive,User-Agent,Cache-Control,Content-Type,Authorization
Access-Control-Allow-Methods: GET,POST,OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-CustomHeader,Keep-Alive,User-Agent,Cache-Control,Content-Type,Authorization
Connection: keep-alive
Content-Type: application/json
Date: Fri, 02 May 2025 12:40:28 GMT
Server: nginx/1.18.0 (Ubuntu)
Transfer-Encoding: chunked

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: da,en-US;q=0.7,en;q=0.3
Connection: keep-alive
Host: shelly-161-eu.shelly.cloud
Priority: u=0, i
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:138.0) Gecko/20100101 Firefox/138.0
Avatar billede arne_v Ekspert
Skrevet i går kl. 17:16 #3
Hvilken type er $device_id? int eller string?

Eller omformuleret:

$data =  [
    "id" => $device_id
] ;

json_encode($data)

er det:

{"id":1746182188622}

eller:

{"id":"1746182188622"}

?
Avatar billede nemlig Professor
Skrevet i går kl. 18:05 #4
Det er: {"id":"1746182188622"}

Jeg har denne kode:
$device_id = '1746182188622';
$data =  [
    "id"         => $device_id
];


Men sætter jeg $device_id sådan her:
$device_id = 1746182188622;

Så der $data således ud:
{"id":1746182188622}

Men stadig samme fejl.
Avatar billede nemlig Professor
Skrevet i går kl. 18:16 #5
Jeg vil nu mene, at type skal være string. Et id kan nemlig også indeholde bogstager ;).
Avatar billede arne_v Ekspert
Skrevet i går kl. 18:48 #6
Den skal uden tvivl være string, fordi det bruger de i svar.
Avatar billede arne_v Ekspert
Skrevet i går kl. 18:51 #7
Er du sikker på at data struktur er flad?

Altså:

$data =  [
    "id" => $device_id
] ;

og ikke f.eks.:

$data =  [
    "data" => [ "id" => $device_id ]
] ;

?
Avatar billede nemlig Professor
Skrevet i går kl. 19:18 #8
Nej, det er jeg ikke sikker på. Jeg ikke fået nogen dokumentation, men blot en URL med parametre - nemlig denne her (auth_key har jeg ændret):

https://shelly-161-eu.shelly.cloud/scene/manual_run?auth_key=....EC723B9D398C748&id=1746179581802

og det virker jo også med metode 1.

Jeg kan fint leve med metode 1 i trådstart, men forstår bare ikke hvorfor den anden metode ikke virker.

Du skal ikke bruge mere tid på det - jeg spørger Shellys support.
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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



IT-JOB

Visma DataLøn og ProLøn

System Developer

Thursday Consulting P/S

Technology - IT & Arkitektur Konsulent

Capgemini Danmark A/S

Security Consultant

Cognizant Technology Solutions Denmark ApS

Deskside Support Engineer