NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: cURL - odeslání dat metodou POST

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
katrincsak
Člen
Avatar
katrincsak:26.1.2018 12:26

Zdravím,

potřebuji poradit a nedaří se mi nikde najít odpověď :( .

Mám 2 php scripty a každý leží na jiné doméně.

Script A posílá požadavek za pomocí cURL metodou POST a potřebuji předat informace do Scriptu B. Netuším ale , jak ve scriptu B odchytím/zpracuji zaslané informace, které potřebuji dále zpracovat a následně informaci poslat zpět, což se mi již pak vrátí v curl_exec.

Potřebuji tedy poradit jak přečtu zaslaný POST ve scriptu B.

$ch = curl_init("http://cesta/example_usage.php");
                $data = array("jmeno" => "Katr", "age" => "27");
                $data_string = json_encode($data);

                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_HEADER, TRUE);
                curl_setopt($ch, CURLOPT_NOBODY, TRUE);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
                $head = curl_exec($ch);
                $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
                curl_close($ch);

Děkuji moc za poskytnuté rady.

 
Odpovědět
26.1.2018 12:26
Avatar
Odpovídá na katrincsak
Uživatel sítě :26.1.2018 14:21

Pokud komunikuješ se scriptem B metodou POST, tak v poli $_POST.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
26.1.2018 14:21
Chybami se člověk učí, běžte se učit jinam!
Avatar
katrincsak
Člen
Avatar
Odpovídá na Uživatel sítě
katrincsak:26.1.2018 16:30

To jsem očekával také, ale z nějakého důvodu se mi POST vracel prázdný. Vytvořil jsem si primitivní 2 scripty a již mi to šlo, zřejmě jedno z nastavení "setopt" má negativní vliv na výsledek, nebo problémem byly i jiné faktory, které jsem na konec vyřešil. (IPN a PayPal).

Tohle mi již fungovalo v pořádku a $_POST ve scriptu B se podařilo vypsat, standardním způsobem.

$_POST['jmeno'] = "Mirek";
$_POST['prijmeni'] = "Kat....";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://URL/curl.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$head = curl_exec($ch);
curl_close($ch);

var_dump($head);

Vzhledem k tomu, že tvé tvrzení je určitě správné, tak pro ostatní ho potvrdím "Akceptováním".

Děkuji.

Editováno 26.1.2018 16:31
 
Nahoru Odpovědět
26.1.2018 16:30
Avatar
Odpovídá na katrincsak
Uživatel sítě :26.1.2018 16:40

Nejsem si na 100% jistý, ale nemůže to souviset s tím, že máš hodnoty v json?

Zkus pouze to pole odeslat:

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
Nahoru Odpovědět
26.1.2018 16:40
Chybami se člověk učí, běžte se učit jinam!
Avatar
katrincsak
Člen
Avatar
Odpovídá na Uživatel sítě
katrincsak:26.1.2018 17:15

Je to dost možné, problém také vznikal na skryté chybě u volaného scriptu, který se choval jinak při volání cURL. Zároveň i když IPN od PayPal je instantní, tak ne vždy to chodí hned, ale i s hodinovým zpožděním. Je tedy možné, že když jsem zrovna vkládal čistě POST a na druhé straně vypisoval POST, tak chyba byla na konec úplně jinde, následně jsem zkoušel předávání v json, nebo jiném řetězci/formátu a tak jsem se dostal do slepé uličky. Již mi 50% komunikace funguje, ale teď už aspoň vím, co je z toho správně a jak dosáhnout správného výsledku.

Takže dneska fakt zábava, ale aspoň se šťastným koncem :D

 
Nahoru Odpovědět
26.1.2018 17:15
Avatar
Šimon Rataj
Člen
Avatar
Šimon Rataj:2.3.2018 15:55

Místo json_encode zkus použít http_build_query.

 
Nahoru Odpovědět
2.3.2018 15:55
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.