Postman과 함께 원시 JSON을 통해 POST 데이터 보내기


107

나는 Postman (Chrome에서 열리지 않는)을 가지고 있으며 원시 json을 사용하여 POST 요청을 수행하려고합니다.

본문 탭에서 "원시"를 선택하고 다음 본문과 함께 "JSON (application / json)"을 선택했습니다.

{
    "foo": "bar"
}

헤더에는 1이 있습니다. Content-Type: application/json

PHP 측에서는 지금 막하고 print_r($_POST);있는데 빈 배열이 생겼습니다.


jQuery를 사용하고 다음을 수행하는 경우 :

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

예상대로 얻고 있습니다.

Array
(
    [foo] => bar
)

그렇다면 Postman과 함께 작동하지 않는 이유는 무엇입니까?


Postman 스크린 샷 :

여기에 이미지 설명 입력

및 헤더 :

여기에 이미지 설명 입력


$ _REQUEST 대신 $ _POST를 사용하고 var_dump () 대신 print_r ()을 시도하십시오
Deep

@Deep 나는 array(1) {["foo"]=> string(3) "bar"}jQuery와 Postman과 함께 여전히 빈 배열을 얻는다 :array(0) {}
Dallas

그래서 Postman이 요청을 보내지 않음
Deep

귀하의 게시물에 @smerny fieldsfoo일치하지 않을 것이므로 작동하지 않습니다. 오타인지 확실하지 않지만 일치하는지 확인하십시오
meda

@meda, 맞습니다. 오타 였지만 필드가 있으면 $ _REQUEST 또는 $ _POST의 var 덤프에 여전히 출력이 있어야합니다
Dallas

답변:


38

jQuery원시 읽기 와 달리 JSONPHP에서 디코딩해야합니다.

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

php://input 요청 본문에서 원시 데이터를 읽을 수있는 읽기 전용 스트림입니다.

$_POST양식 변수이므로 다음을 사용 하여 form라디오 버튼 으로 전환해야 postman합니다.

foo=bar&foo2=bar2

원시 게시하려면 jsonjquery:

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

예 exaclty 게시 json 대 게시물 변수가 다릅니다
meda aug

43

바이너리 옆의 드롭 다운에서 JSON 옵션을 확인하십시오. 원시를 클릭하면. 해야 할 일

Skill synon은 json을 우편 배달부에게 전달합니다.


4
이것은 상당히 오래된 게시물입니다. 그러나 질문을 보면 내가 정확히 그랬음을 알 수 있습니다. 문제와 해결 방법을 더 잘 이해하기 위해 질문, 선택한 답변 및 선택한 답변에 대한 설명을 읽을 수 있습니다.
Dallas

1
물론입니다.하지만 이것은 실제로 제가 가진 문제를 정확히 지적했습니다. 헤더 섹션에서 이미 언급 했음에도 불구하고 application / json이 아닌 "텍스트"를 선택했습니다. 혼란 스럽습니다. "텍스트"를 선택하면 json뿐만 아니라 전체 POST 호출이므로 작동 할 것으로 예상되는 JSON을 포함하여 전체 HTTP POST "코드"가 표시됩니다.
Ted

7

meda의 대답은 완전히 합법적이지만 코드를 복사하면 오류가 발생했습니다!

어딘가에 "php://input"잘못된 문자가 있습니다 (따옴표 중 하나 일 수 있습니까?).

"php://input"수동으로 코드를 입력했을 때 작동했습니다. 알아내는 데 시간이 걸렸습니다!


1
조금 더 아래로 스크롤하여 이것을 보았습니다. 같은 문제가 발생했습니다. 좋은 찾기!
Charlie Stanard

2
누군가 meda의 게시물을 수정하여 수정 한 것 같습니다. 그러나 편집 내역을 살펴본 결과 원본 게시물의 200c 200b"입력"에서 "n"과 "p"사이에 너비 가 0 인 문자 가 있음을 발견했습니다 . 그가 어떻게 끝났는지 확실하지 않지만 지금은 해결되었습니다.
달라스

6

나는 같은 문제에 직면하고 있었고 다음 코드가 나를 위해 일했습니다.

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


1

Postman 기본 앱을 설치하세요. Chrome 확장 프로그램은 더 이상 사용되지 않습니다. (내 창이 자체 창에서 열렸지만 여전히 Chrome 앱으로 실행 됨)


2
이것은 질문에 대한 답이 아닙니다.
jhpratt

@jhpratt 실제로 그렇습니다. 나는 같은 문제가 있었다. Postman 앱을 사용하면 작동했습니다. 질문은 : 왜 Postman과 작동하지 않습니까?
Jaroslav Štreit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.