Curl ile PHP JSON göndermek nasıl

6 Cevap php

Ben yol kapalı üssü olabilir, ama ben bu girinti PHP çerçeve öğretici the curl post command çalıştırmak için tüm öğleden sonra çalışıyorum. Ne ben anlamıyorum benim POST yorumlamak gerekiyordu PHP, her zaman boş bir dizi olarak çıkageldi nasıl.

curl -i -X POST -d '{"screencast":{"subject":"tools"}}'  \
      http://localhost:3570/index.php/trainingServer/screencast.json

(Orada çizgi bana bir aptal gibi görünmüyor yapmaktır, ama ben PHP 5.2 kullanarak pencereler bu idam, aynı zamanda Linux kıvrılma ile aynı sürüm, Linux sunucu üzerinde çalıştı)

O olsaydı, her şey harika işe, yazılan sadece doğru yorumlanamaz değil, oldukça basit görünüyor çünkü Kaçırdığım bir şey olmalı.

Bu geri almak budur:

HTTP/1.1 409 Conflict
Date: Fri, 01 May 2009 22:03:00 GMT
Server: 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}}

6 Cevap

$ _POST-Dizi doldurulur neden Jordan analizi doğrudur. Ancak, kullanabilirsiniz

$data = file_get_contents("php://input");

sadece http vücut almak ve kendiniz işlemek için. Bkz PHP input/output streams.

Eğer gerçekten zaten http Çoklu form verilerini işlemek değil çünkü bir protokol açısından bakıldığında, bu, aslında daha doğru. İsteğinizi gönderme Ayrıca, içerik türü olarak application / json kullanabilirsiniz.

Normalde parametre -d şeklinde kodlanmış olarak yorumlanır. Sen -H parametresi gerekir:

curl -v -H "Content-Type: application/json" -X POST -d '{"screencast":{"subject":"tools"}}' \
http://localhost:3570/index.php/trainingServer/screencast.json

Ben PHP yayınlanan verileri Querystring biçimi (anahtar = değer & anahtarı1 = değer1) olmayı bekliyor çünkü boş bir dizi alıyorsanız inanıyoruz.

Curl isteğinizi değiştirmeyi deneyin:

curl -i -X POST -d 'json={"screencast":{"subject":"tools"}}'  \
      http://localhost:3570/index.php/trainingServer/screencast.json

herhangi bir yardımcı olur ve görmek.

Sen kıvırmak JSON olarak veri gönderir, böylece bir kaç ekstra bayraklar ayarlamanız gerekir.

command

$ curl -H "Content-Type: application/json" \
       -X POST \
       -d '{"JSON": "HERE"}' \
       http://localhost:3000/api/url

flags

  • -H: özel başlık, bir sonraki argüman başlık olması bekleniyor
  • -X: özel HTTP fiil, bir sonraki argüman fiil olması bekleniyor
  • -d: bir HTTP POST isteği veri olarak sonraki argümanını gönderir

resources

Böyle tırnak kaçmak gerekir:

curl -i -X POST -d '{\"screencast\":{\"subject\":\"tools\"}}'  \
  http://localhost:3570/index.php/trainingServer/screencast.json

Sorunlarınızdan çoğunlukla Yuva çerçevesi içinde bazı sorunlara neden olduğunu.

Bu belki yol çok geç sanırım, ama yine de json yazabilmek için Tatile kullanarak ısrar ediyorum eğer, bazı kirli işler yapmak zorunda kalabilirsiniz. Belki bazı iç veri Yuva API içindeki json değerleri geçerken oluyor sorunları vardır akar. Sonucu sadece boş değerleri veritabanına kaydedilir ediliyor olmasıdır. Ayrıntılı bir gözlem / çözüm http://forums.recessframework.org/topic/189-json-request-doesnt-insert-values-in-v02/ gönderdi, ancak bu API kendisinde bazı değişen kodları (sadece bir dosya var, bu yüzden hiçbir endişe) içerecektir. Bu çözüm benim için iyi çalıştı.