Być może jestem daleko od podstaw, ale przez całe popołudnie próbowałem uruchomić polecenie curl post w tym samouczku dotyczącym frameworka PHP. Nie rozumiem tylko, w jaki sposób PHP ma interpretować mój POST, zawsze pojawia się jako pusta tablica.
curl -i -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json
(Ukośnik ma tylko sprawić, że nie będę wyglądać jak idiota, ale wykonałem to z systemu Windows przy użyciu PHP 5.2, również wypróbowałem na serwerze Linux, ta sama wersja z curl Linuksa)
Musi być coś, czego mi brakuje, ponieważ wydaje się to całkiem proste, po prostu post nie zostałby zinterpretowany poprawnie, gdyby tak było, wszystko byłoby świetnie.
Oto, co otrzymuję:
Konflikt HTTP / 1.1 409 Data: piątek, 1 maja 2009, 22:03:00 czasu GMT Serwer: Apache / 2.2.8 (Win32) PHP / 5.2.6 X-Powered-By: PHP / 5.2.6 Transfer-Encoding: chunked Content-Type: text / html; charset = iso-8859-1 {"screencast": {"id": null, "subject": null, "body": null, "dataUrl": null, "dataMedium": null, "createdOn": null, "author": null}}
application/json
.Odpowiedzi:
Analiza Jordans dotycząca przyczyny niewypełnienia tablicy $ _POST jest poprawna. Możesz jednak użyć
po prostu pobrać treść http i obsłużyć ją samodzielnie. Zobacz strumienie wejścia / wyjścia PHP .
Z punktu widzenia protokołu jest to bardziej poprawne, ponieważ tak naprawdę nie przetwarzasz danych formularza wieloczęściowego http. Podczas wysyłania żądania użyj także application / json jako typu zawartości.
źródło
Zwykle parametr
-d
jest interpretowany jako zakodowany w postaci. Potrzebujesz-H
parametru:źródło
Uważam, że otrzymujesz pustą tablicę, ponieważ PHP oczekuje, że opublikowane dane będą w formacie Querystring (klucz = wartość i klucz1 = wartość1).
Spróbuj zmienić swoją prośbę o zawinięcie na:
i zobacz, czy to pomoże.
źródło
-H "Content-Type: application/json"
mnie nie działa.Musisz ustawić kilka dodatkowych flag, aby curl wysyłał dane jako JSON.
Komenda
flagi
-H
: niestandardowy nagłówek, następny argument powinien być nagłówkiem-X
: niestandardowy czasownik HTTP, następny argument powinien być czasownikiem-d
: wysyła następny argument jako dane w żądaniu HTTP POSTzasoby
źródło
Powinieneś uciec przed cytatami w ten sposób:
źródło