Postacı ile ham json aracılığıyla POST verilerini gönderin


107

Postman'ım var (Chrome'da açılmayan) ve ham json kullanarak bir POST isteği yapmaya çalışıyorum.

Gövde sekmesinde bu gövdeyle birlikte "ham" seçilmiş ve "JSON (uygulama / json)" var:

{
    "foo": "bar"
}

Başlık için 1 var, Content-Type: application/json

PHP tarafında print_r($_POST);şimdilik sadece yapıyorum ve boş bir dizi alıyorum.


JQuery kullanır ve yaparsam:

$.ajax({
    "type": "POST",
    "url": "/rest/index.php",
    "data": {
        "foo": "bar"
    }
}).done(function (d) {
    console.log(d);
});

Beklendiği gibi alıyorum:

Array
(
    [foo] => bar
)

Peki neden Postman ile çalışmıyor?


Postacı ekran görüntüleri:

görüntü açıklamasını buraya girin

ve başlık:

görüntü açıklamasını buraya girin


$ _POST yerine $ _REQUEST ve bunun yerine var_dump () deneyin print_r ()
Derin

@Deep array(1) {["foo"]=> string(3) "bar"}jQuery ile alıyorum ve hala Postacı ile boş bir dizi:array(0) {}
Dallas

Postacı istek göndermiyor
Derin

Gönderinizde @smerny var fieldsve fooeşleşmeyecek, bu yüzden işe yaramayacak, bir yazım hatası olup olmadığından emin değilim ama eşleştiğinden emin olun
meda

@meda, doğru bu bir yazım hatasıydı, ancak alanlarım olsaydı, yine de $ _REQUEST veya $ _POST var dökümünde çıktı almalıydı
Dallas

Yanıtlar:


38

jQueryHam olarak okumaktan farklı olarak JSONPHP'de kodunu çözmeniz gerekir.

print_r(json_decode(file_get_contents("php://input"), true));

php://input istek gövdesinden ham verileri okumanıza izin veren salt okunur bir akıştır.

$_POSTform değişkenleriyse, formradiobutton'a geçmeniz ve postmanardından şunu kullanmanız gerekir:

foo=bar&foo2=bar2

Ham yayınlamak jsoniçin jquery:

$.ajax({
    "url": "/rest/index.php",
    'data': JSON.stringify({foo:'bar'}),
    'type': 'POST',
    'contentType': 'application/json'
});

evet tam anlamıyla json ve gönderi değişkenleri farklı
meda

43

İkilinin yanındaki açılır menüden JSON seçeneğini kontrol edin; ham tıkladığınızda. Bu yapmalı

yetenek synon json postacıya geçiş


4
bu oldukça eski bir gönderi .. ama soruya bakarsanız, tam olarak bunu yaptığımı göreceksiniz. Sorunu ve çözümü daha iyi anlamak için soruyu, seçilen cevabı ve seçilen cevapla ilgili yorumları okumak isteyebilirsiniz.
Dallas

1
Elbette, ama bu aslında sahip olduğum sorunu tam olarak belirledi; Başlıklar bölümünde daha önce bahsedilmiş olmasına rağmen, application / json yerine "Metin" seçtim. Kafa karıştırıcı; "Metin" i seçerseniz, tam bir POST çağrısı olduğundan, yalnızca json değil, çalışmasını beklediğim JSON dahil olmak üzere tüm HTTP POST "kodu" görüntülenir.
Ted

7

meda'nın cevabı tamamen yasal, ancak kodu kopyaladığımda bir hata aldım!

İçinde bir yerde "php://input"geçersiz bir karakter var (belki alıntılardan biri?).

"php://input"Kodu manuel olarak yazdığımda işe yaradı. Anlamam biraz zaman aldı!


1
Biraz daha aşağı kaydırdım ve bunu gördüm - aynı sorunu yaşıyordum. İyi bul!
Charlie Stanard

2
Görünüşe göre meda'nın gönderisine yapılan bir düzenlemede birisi düzeltmiş. Ancak düzenleme geçmişine baktım ve orijinal gönderinin 200c 200b"input" içinde "n" ve "p" arasında (sıfır genişlikli karakterler) olduğunu buldum . Nasıl sonuçlandığından emin değilim, ama şimdi düzeltildi.
Dallas

6

Aynı sorunla karşılaşıyordum, aşağıdaki kod benim için çalıştı:

$params = (array) json_decode(file_get_contents('php://input'), TRUE);
print_r($params);


1

Postman yerel uygulamasını yükleyin, Chrome uzantısı kullanımdan kaldırıldı. (Benimki kendi penceresinde açılıyordu ama yine de Chrome uygulaması olarak çalışıyordu)


2
Bu soruya cevap vermiyor.
jhpratt

@jhpratt aslında öyle. Aynı problemim vardı. Postman uygulaması kullanıldığında işe yaradı. Soru şu: Peki neden Postman ile çalışmıyor?
Jaroslav Štreit
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.