Autor Zpráva
quatzael
Profil
Potřebuju na URL poslat požadavek přes proměnnou POST a získat zpátky odpověď. Jedná se o API.
Poradíte prosím někdo jak na to?
Baklazan1
Profil *
skus cURL
quatzael
Profil
Baklazan1:
No tak jsem to trochu nastudoval.
Takhle, to co řeším já má být REST INTERFACE.
Nějak mi není ale jasný jak se s tím zachází..
Tím postem mám poslat data ve formátu JSON.

Zkouším tohle:

$url="http://55.12.602.8:43090/api/services/rest/super_api/Functions";
$json = '{"firstName":"Ferda", "lastName":"Mravenec"}';
$options = array(
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 2,
    CURLOPT_URL => $url, 
    // nemám tam dát náhodou ještě nějaký $query, ve kterým by byl ten POST? Něco takovýho například: $url."?".$query ?
    CURLOPT_CUSTOMREQUEST => 'POST', 
    CURLOPT_POSTFIELDS => $json
  ); 
  $rest= curl_init();
  curl_setopt_array($rest,$options); 
  $response =  json_decode(curl_exec($rest),true);

Vůbec nevím jak na to..
Jde nějak aspoň ověřovat, že je navázáno spojení? Nebo i získávat požadovanou strukturu requestu, tak jak je to u ws?
juriad
Profil
Možná musíš poslat hlavičku Content-Type: application/json.
Příklad těch hlaviček máš tady: www.lornajane.net/posts/2011/posting-json-data-with-php-curl
Ne, url je jen toto. Představ si to, jako že odesíláš POSTem formulář, tam se také skrze URL nic nepřidává.
Pro začátek si také zakaž CURLOPT_RETURNTRANSFER a nesnaž se dekódovat odpověď - tak se ti přímo zobrazí. Až to odladíš (dostaneš to co chceš), tak si to zase přidáš.
quatzael
Profil
juriad:
Zkusil jsem: $rest= curl_init(); var_dump($rest); a háže mi to: resource(7) of type (curl)
Co znamená ta sedmička?

Možná musíš poslat hlavičku Content-Type: application/json.
Zkusil jsem, ale ani tak to nefunguje..

Ne, url je jen toto. Představ si to, jako že odesíláš POSTem formulář, tam se také skrze URL nic nepřidává.
To chápu, ale tohle je pro mě naprostá velká neznámá, takže nevím na co vše se můžu spolehnout, že platí jako v běžným fungování.

$response =  json_decode(curl_exec($rest),true); // tohle mi háže: 1 (int)
$response =  curl_exec($rest); // tohle zase: true (bool)
To ale asi nemá být odpověď toho api. Měl by to být nejspíš zase json..
juriad
Profil
quatzael:
resource je php.net/manual/en/language.types.resource.php. Je to abstrakce něceho skrytého v knihovnách mimo PHP; uvnitř PHP to nemá žádnou reprezentaci. Takže, aby se to dalo alespoň rozeznat, jsou jednotlivé resourcy očíslované.

Povol si CURL_HEADER, ať víš, co ti server odpovídá. Pokud máš CURLOPT_RETURNTRANSFER zakázané, tak to znamená, že dotaz proběhl vpořádku (a samotnou odpověď cURL vypíše); v opačném případě by curl_exec měl vrátit odpověď (což by byl nějaký string).
quatzael
Profil
juriad:
Povol si CURL_HEADER, ať víš, co ti server odpovídá.
Jak poznám co odpovídá? Povolil jsem si to, ale žádná změna nenastala..

pozn. CURLOPT_RETURNTRANSFER zakázané mám.

Dá se nějak ověřit, že request představovaný $json je ok? Jako například, kdyby chběly nějaký data, nevrátilo by to nějaký upozornění nebo error?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: