Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.php > #4146 > unrolled thread
| Started by | Ralph Stahl <post@rstahl.de> |
|---|---|
| First post | 2017-06-30 09:51 +0200 |
| Last post | 2017-07-02 16:18 +0200 |
| Articles | 5 — 2 participants |
Back to article view | Back to de.comp.lang.php
mit cURL json-Daten an PHP-Script schicken Ralph Stahl <post@rstahl.de> - 2017-06-30 09:51 +0200
Re: mit cURL json-Daten an PHP-Script schicken Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2017-06-30 08:58 +0000
Re: mit cURL json-Daten an PHP-Script schicken Ralph Stahl <post@rstahl.de> - 2017-06-30 13:51 +0200
Re: mit cURL json-Daten an PHP-Script schicken Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2017-06-30 13:42 +0000
Re: mit cURL json-Daten an PHP-Script schicken Ralph Stahl <post@rstahl.de> - 2017-07-02 16:18 +0200
| From | Ralph Stahl <post@rstahl.de> |
|---|---|
| Date | 2017-06-30 09:51 +0200 |
| Subject | mit cURL json-Daten an PHP-Script schicken |
| Message-ID | <oj4vnm$col$1@dont-email.me> |
Moin,
Ich konstruiere einen Endpunkt für eine REST-API, die mittels cURL
realisiert werden soll. Damit kann ich das prima in der Shell testen -
wenn es mal funktioniert. Die unwesentliche Randbedingung: Die Sache
läuft mit PHP 7.1 auf einem nginx-Webserver, die API ist mit einem
Redirect zu erreichen (daher der Parameter -L in der curl-Zeile).
Zur Sache:
Die API besteht im Einfachsten Fall aus wenigen Zeilen PHP, die mir den
Inhalt von $_POST und $_GET anzeigen bzw. zurückgeben. Mehr passiert
noch nicht.
<?php
echo 'CMD ' . $_GET['cmd'];
echo "\n";
echo "PARAM\n";
echo print_r($_POST, true);
echo "\n";
Diese steuere ich in der Shell so an:
[rollo: ~] curl -i -d '{"a":5}' -L http://localhost/.../app/getpos
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Fri, 30 Jun 2017 07:38:37 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
CMD getpos
PARAM
Array
(
)
Das Problem ist also: Meine "Nutzdaten, im Beispiel also der JSON-String
'{"a":5}', kommen so nicht im $_POST an, obwohl die Syntax überall so
beschrieben wird. Lasse ich den Content-Type probehalber weg, kommt
PARAM
Array
(
[{"a":5}] =>
)
als $_POST-Array an. Die Daten werden also übertrage, allerdings wie zu
erwarten falsch. Es ist übrigens egal, ob ich '{"a":5}' oder "{'a':5}"
schreibe - das wird manchmal als mögliche Fehlerquelle genannt.
Fazit:
Ich bekomme es nicht hin, auswertbare JSON-Daten zu bekommen. Wie
müssten sie eigentlich aussehen? So
Array
(
"a" => 5
}
vielleicht? Alle möglichen Beispiele, die ich gefunden habe, setzen das
irgendwie voraus :-(.
Bitte helft mir auf die Sprünge, ich drehe mich im Kreis. Danke im Voraus!
Ralph
[toc] | [next] | [standalone]
| From | Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) |
|---|---|
| Date | 2017-06-30 08:58 +0000 |
| Message-ID | <3t59560f76i69fn3e8%sfroehli@Froehlich.Priv.at> |
| In reply to | #4146 |
On Fri, 30 Jun 2017 09:51:52 Ralph Stahl wrote:
> Ich bekomme es nicht hin, auswertbare JSON-Daten zu bekommen. Wie
> müssten sie eigentlich aussehen? So
>
> Array
> (
> "a" => 5
> }
Nein, gar nicht. Mit $_POST bekommst Du Daten, die
x-www-form-urlencoded übertragen worden sind, also grob das, was Dir
ein HTML-Formular erzeugt.
JSON sieht ganz anders aus, und da es $_JSON in PHP nicht gibt,
musst Du etwas in der Form von:
#v+
<?php var_dump(json_decode(file_get_contents("php://input"))); ?>
#v-
machen.
Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike
Stefan - die vollkommenste Nuance von neu!
(Sloganizer)
[toc] | [prev] | [next] | [standalone]
| From | Ralph Stahl <post@rstahl.de> |
|---|---|
| Date | 2017-06-30 13:51 +0200 |
| Message-ID | <oj5do3$pd9$1@dont-email.me> |
| In reply to | #4147 |
Stefan Froehlich schrieb:
> On Fri, 30 Jun 2017 09:51:52 Ralph Stahl wrote:
>> Ich bekomme es nicht hin, auswertbare JSON-Daten zu bekommen. Wie
>> müssten sie eigentlich aussehen? So
>>
>> Array
>> (
>> "a" => 5
>> }
>
> Nein, gar nicht. Mit $_POST bekommst Du Daten, die
> x-www-form-urlencoded übertragen worden sind, also grob das, was Dir
> ein HTML-Formular erzeugt.
>
> JSON sieht ganz anders aus, und da es $_JSON in PHP nicht gibt,
> musst Du etwas in der Form von:
>
> #v+
> <?php var_dump(json_decode(file_get_contents("php://input"))); ?>
> #v-
>
> machen.
>
> Servus,
> Stefan
>
Famos! Ich mache jetzt mit deiner obigen Zeile:
<?php
echo 'CMD ' . $_GET['cmd'];
echo "\n";
echo "PARAM\n";
echo var_dump(json_decode(file_get_contents("php://input")));
echo "\n";
und bekomme völlig richtig
[rollo: ~] curl -i -d '{"a":5}' -L http://.../app/getpos
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Fri, 30 Jun 2017 11:44:36 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
CMD getpos
PARAM
object(stdClass)#1 (1) {
["a"]=>
int(5)
}
kann also das entstandene Objekt sinnvoll verwenden. Warum wird dann in
allen möglichen Quellen (Foren, Beispielen) einschließlich der Doku zu
curl der Parameter
curl -H "Content-Type: text/json" ...
als erforderlich bezeichnet?
Danke Stefan!
Ralph
[toc] | [prev] | [next] | [standalone]
| From | Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) |
|---|---|
| Date | 2017-06-30 13:42 +0000 |
| Message-ID | <5t5956542bi6adcn3e8%sfroehli@Froehlich.Priv.at> |
| In reply to | #4148 |
On Fri, 30 Jun 2017 13:51:01 Ralph Stahl wrote:
> Stefan Froehlich schrieb:
> > JSON sieht ganz anders aus, und da es $_JSON in PHP nicht gibt,
> > musst Du etwas in der Form von:
> >
> > #v+
> > <?php var_dump(json_decode(file_get_contents("php://input"))); ?>
> > #v-
> >
> > machen.
> [...] Warum wird dann in allen möglichen Quellen (Foren, Beispielen)
> einschließlich der Doku zu curl der Parameter
>
> curl -H "Content-Type: text/json" ...
>
> als erforderlich bezeichnet?
Weil's korrekt ist: Du schickst ja nun einmal nicht HTML sondern JSON
über die Leitung.
Das ist zwar egal, wenn am anderen Ende jemand php://input verwendet,
aber es *könnte* dort auch abhängig vom Content-Type verarbeitet werden.
Servus,
Stefan
--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike
Vergnügen mit Stefan, überlegen und fern!
(Sloganizer)
[toc] | [prev] | [next] | [standalone]
| From | Ralph Stahl <post@rstahl.de> |
|---|---|
| Date | 2017-07-02 16:18 +0200 |
| Message-ID | <ojav41$fl$1@dont-email.me> |
| In reply to | #4149 |
Stefan Froehlich schrieb:
> On Fri, 30 Jun 2017 13:51:01 Ralph Stahl wrote:
>> Stefan Froehlich schrieb:
>>> JSON sieht ganz anders aus, und da es $_JSON in PHP nicht gibt,
>>> musst Du etwas in der Form von:
>>>
>>> #v+
>>> <?php var_dump(json_decode(file_get_contents("php://input"))); ?>
>>> #v-
>>>
>>> machen.
>
>> [...] Warum wird dann in allen möglichen Quellen (Foren, Beispielen)
>> einschließlich der Doku zu curl der Parameter
>>
>> curl -H "Content-Type: text/json" ...
>>
>> als erforderlich bezeichnet?
>
> Weil's korrekt ist: Du schickst ja nun einmal nicht HTML sondern JSON
> über die Leitung.
>
> Das ist zwar egal, wenn am anderen Ende jemand php://input verwendet,
> aber es *könnte* dort auch abhängig vom Content-Type verarbeitet werden.
>
> Servus,
> Stefan
>
Danke Stefan! Alles verstanden :-).
Ralph
[toc] | [prev] | [standalone]
Back to top | Article view | de.comp.lang.php
csiph-web