Yükü kıvırmak için JSON dosyası üzerinden nasıl geçirebilirim?


201

curlAşağıdaki komutu yürüterek başarıyla bir yer oluşturabilirim :

$ curl -vX POST https://server/api/v1/places.json -d "
  auth_token=B8dsbz4HExMskqUa6Qhn& \
  place[name]=Fuelstation Central& \
  place[city]=Grossbeeren& \
  place[address]=Buschweg 1& \
  place[latitude]=52.3601& \
  place[longitude]=13.3332& \
  place[washing]=true& \
  place[founded_at_year]=2000& \
  place[products][]=diesel& \
  place[products][]=benzin \
"

Sunucu geri döner HTTP/1.1 201 Created.
Şimdi yükü şöyle görünen bir JSON dosyasında saklamak istiyorum:

// testplace.json
{
  "auth_token" : "B8dsbz4HExMskqUa6Qhn",
  "name" : "Fuelstation Central",
  "city" : "Grossbeeren",
  "address" : "Buschweg 1",
  "latitude" : 52.3601,
  "longitude" : 13.3332,
  "washing" : true,
  "founded_at_year" : 2000,
  "products" : ["diesel","benzin"]
}

Bu yüzden şu şekilde yürütülecek komutu değiştirin:

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json

Bu geri dönmüyor HTTP/1.1 401 Unauthorized. Neden?


1
Ayrıca, ikili dosyalar yüklüyorsanız kullanmanız gerektiğini unutmayın --data-binary.
AhmetB - Google

Yanıtlar:


329

curlvarsayılan içerik türü ile POST istekleri gönderir application/x-www-form-urlencoded. Bir JSON isteği göndermek istiyorsanız, doğru içerik türü üstbilgisini belirtmeniz gerekir:

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json \
--header "Content-Type: application/json"

Ancak bu yalnızca sunucu json girişini kabul ederse çalışır. .jsonUrl sonunda göstermektedir okunur olabilir çıktı json, o mutlaka o da json idare edecek anlamına gelmez girişi . API dokümantasyonu size bunu yapıp yapmadığına dair bir ipucu vermelidir.

Bu durum, bir olsun 401ve sunucu ayıklamak olamaz çünkü değil diğer bazı hata muhtemelen auth_tokenisteğinizden.


8
Ben kullanmaya çalışıyordu cat file.jsonsonra -dben kullanabileceği bu cevap öğrenilen kadar ve onunla dertteydi @file.json. Teşekkürler :)
shadi

1
birden fazla başlığa ihtiyacınız varsa , en azından Ubuntu'da bash içinde test edildiğinde -H/ --headerbirden çok kez belirtmeniz gerektiğini unutmayın .
Chaim Eliyah
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.