Autor | Zpráva | ||
---|---|---|---|
toredor Profil |
#1 · Zasláno: 10. 9. 2014, 18:21:05 · Upravil/a: Moderátor (editace znemožněna) 24. 9. 2014, 00:04:57
Ahoj,
potřebuji odesílat data pomocí JSON. URL na kterou se data odesílají je zabezpečená jménem a heslem. Může mi někdo poradit jak na to? Díky |
||
Joker Profil |
#2 · Zasláno: 10. 9. 2014, 19:04:23
toredor:
A v čem konkrétně je problém? „Zabezpečená jménem a heslem“ znamená HTTP autentizaci? |
||
Jan Tvrdík Profil |
$options = [ 'http' => [ 'method' => 'POST', 'content' => json_encode($data), 'header'=> 'Content-Type: application/json', ] ]; $context = stream_context_create($options); $response = file_get_contents($url, false, $context); |
||
toredor Profil |
#4 · Zasláno: 11. 9. 2014, 07:56:48
Problém mám v tom zabezpečení a je to HTTP autentizace.
|
||
blaaablaaa Profil |
#5 · Zasláno: 11. 9. 2014, 08:35:55
Resilo se to tu 6 dni zpatky.
'header' => "Authorization: Basic " . base64_encode("$username:$password") |
||
Časová prodleva: 13 dní
|
|||
toredor Profil |
#6 · Zasláno: 23. 9. 2014, 21:00:58 · Upravil/a: Moderátor (editace znemožněna) 24. 9. 2014, 00:00:52
Moderátor Davex: Následující tři příspěvky byly přesunuty z duplicitního tématu.
Ahoj, nedávno jsem tady psal o pomoc s odesílání dat pomocí JSON. URL je zabezpečená autorizací. Stále se mi to nedaří. Data odesílám pomocí: $body = "[{"id": "687", "title": "Jatka fest", "description": "Hudební festival, vystoupí UDG, Visací zámek, Jaroslav Uhlíř, Adam Mišík, The Tap Tap, Tlustá Berta, Hentai Corporation, Memphis, Všichni svatí, Cover trio, Bastards way. Od 10 hodin program pro děti. Předprodej v baru Legenda. Vstupné 239 Kč/299 Kč.", "from": "2014-07-05T10:00:00+02:00", "to": "2014-07-05T23:55:00+02:00", "locale": "cs"}]"; $opts2 = array('http' => array( 'method' => 'POST', 'header' => "Authorization: Basic ". base64_encode("zamek.api:68fa63a34cc7d"), 'data' => json_encode($body) ) ); $context = stream_context_create($opts2); $url = 'http://zamek.stg.eballance.cz/api/events.json'; $result = file_get_contents($url, false, $context, -1, 40000) curl -XPOST -H "Content-Type: application/json" "http://zamek.stg.eballance.cz/api/events.json" -u "zamek.api:68fa63a34cc7d" -d ' [ { "id": "event-cs-1-id", "title": "Nadpis CS EVENT 1", "description": "Toto je telo CS EVENT 1. Bah blah blah :)", "from": "2014-08-17T19:26:27+02:00", "to": "2014-08-21T19:27:27+02:00", "locale": "cs" }, { "id": "event-cs-2-id", "title": "Nadpis CS EVENT 2", "description": "Toto je telo CS EVENT 2. Bah blah blah :)", "from": "2014-08-17T19:26:27+02:00", "to": "2014-08-22T19:27:27+02:00", "locale": "cs" }] Vidí někdo nějakou chybu nebo má nějakou radu jak by to mělo vypadat? Díky |
||
Davex Profil |
#7 · Zasláno: 23. 9. 2014, 21:37:41
Obsah proměnné
$body zjevně není pole ani řetězec a skript tam skončí na syntaktickou chybu. Funkci json_encode() zpravidla potřebuješ pro konverzi obsahu proměnné do JSON formátu, takže když už máš v proměnné řetězec v JSON, tak jí nepotřebuješ.
$body = '[{"id": "687", "title": "Jatka fest", "description": "Hudební festival, vystoupí UDG, Visací zámek, Jaroslav Uhlíř, Adam Mišík, The Tap Tap, Tlustá Berta, Hentai Corporation, Memphis, Všichni svatí, Cover trio, Bastards way. Od 10 hodin program pro děti. Předprodej v baru Legenda. Vstupné 239 Kč/299 Kč.", "from": "2014-07-05T10:00:00+02:00", "to": "2014-07-05T23:55:00+02:00", "locale": "cs"}]'; |
||
toredor Profil |
#8 · Zasláno: 23. 9. 2014, 21:53:05
Skript skončí chybou "failed to open stream: HTTP request failed! HTTP/1.1 500 Internal Server Error" (to je chyba špatného formátu dat, které posílám) výpis $body je jen ukázkou dat, které se snažím odeslat. Vypsal jsem si je pomoci print_r();
|
||
Davex Profil |
#9 · Zasláno: 24. 9. 2014, 00:23:07
|
||
Jan Tvrdík Profil |
#10 · Zasláno: 24. 9. 2014, 13:29:41
Připomenu, že když chceš poslat více HTTP hlaviček, tak je dáš do pole:
$options = [ 'http' => [ ... 'header'=> [ 'Content-Type: application/json', 'Authorization: Basic ' . base64_encode("$username:$password"), ], ] ]; |
||
toredor Profil |
#11 · Zasláno: 24. 9. 2014, 20:05:38
přepsal jsem to podle rad a mám to takto:
$options = [ 'http' => [ 'method' => 'POST', 'header'=> ['Content-Type: application/json','Authorization: Basic ' . base64_encode("$username:$password")], 'content' => json_encode($event) ] ]; $context = stream_context_create($options); $response = file_get_contents($url, false, $context); vypisuje mi to chybu: "Parse error: syntax error, unexpected '[' in script-events.php on line 100" vidí tam někdo chybu? |
||
Lamicz Profil |
PHP < 5.4 - musíš použít starou
array() syntaxi
|
||
toredor Profil |
#13 · Zasláno: 24. 9. 2014, 20:47:08 · Upravil/a: toredor
Máte pravdu je tam PHP 5.3. Je nějaká možnost jak to obejít? Díky
přepsal jsem na array() a mám tam chybu: "file_get_contents(): Filename cannot be empty" |
||
toredor Profil |
#14 · Zasláno: 24. 9. 2014, 21:57:39
už to funguje díky za pomoc :-)
|
||
Časová prodleva: 10 let
|
0