PHP를 사용하여 JSON 게시물 보내기


85

이 json 데이터가 있습니다.

{ 
    userID: 'a7664093-502e-4d2b-bf30-25a2b26d6021',
    itemKind: 0,
    value: 1,
    description: 'Saude',
    itemID: '03e76d0a-8bab-11e0-8250-000c29b481aa'
}

그리고 json URL에 게시해야합니다 : http : // domain / OnLeagueRest / resources / onleague / Account / CreditAccount

PHP를 사용하여이 게시물 요청을 어떻게 보낼 수 있습니까?


2
좀 더 자세한 정보 나 코드 제공
jimy 2011-06-02

userID, itemKind, 값, 설명 및 itemID와 함께 json 게시물을 보내면됩니다.
Carlos Martins

@Gumbo 크롬은 동의하지)

3
@Phil : JSON은 JavaScript 가 아니며 그 반대의 경우도 마찬가지입니다. Chrome은 자바 스크립트 인터프리터가 있기 때문에이 코드를 받아 들일 수 있습니다. 그러나 JSON.parse해당 코드를 구문 분석하는 데 사용 하면 확실히 실패합니다.
Gumbo 2011 년

@Gumbo 추가 정보에 감사드립니다. 문제가 인용되지 않은 키입니까?
Phil 11

답변:


119

외부 종속성 또는 라이브러리를 사용하지 않고 :

$options = array(
  'http' => array(
    'method'  => 'POST',
    'content' => json_encode( $data ),
    'header'=>  "Content-Type: application/json\r\n" .
                "Accept: application/json\r\n"
    )
);

$context  = stream_context_create( $options );
$result = file_get_contents( $url, false, $context );
$response = json_decode( $result );

$ response 는 객체입니다. 속성은 평소와 같이 액세스 할 수 있습니다. 예 : $ response-> ...

여기서 $ data데이터 를 연결하는 배열입니다.

$data = array(
  'userID'      => 'a7664093-502e-4d2b-bf30-25a2b26d6021',
  'itemKind'    => 0,
  'value'       => 1,
  'description' => 'Boa saudaÁ„o.',
  'itemID'      => '03e76d0a-8bab-11e0-8250-000c29b481aa'
);

경고 : php.ini에서 allow_url_fopen 설정이 Off 로 설정되어 있으면 작동하지 않습니다 .

WordPress 용으로 개발 하는 경우 제공된 API를 사용하는 것이 좋습니다 . https://developer.wordpress.org/plugins/http-api/


1
내가 몇 년 늦었다는 것을 알고 있지만이 방법으로 응답 헤더를 얻을 수 있습니까?
solarshado

3
확장 프로그램없이이 작업을 언급 해 주셔서 감사합니다!
joonas.fi

연장 없이는 언제나 환영합니다. WP에 표준화 된 API가 있다는 것을 몰랐습니다. 정보를 제공해 주셔서 감사합니다!
Vedran Šego

2
@solarshado 원시 응답 헤더는 stream_get_meta_data 로 가져올 수 있습니다 .
Daniels118

1
작은 개선 제안으로, 특히 Authorization과 같은 더 많은 헤더를 추가해야하는 경우 헤더를 배열에 넣을 수 있습니다. 이 경우 "\ r \ n"을 추가 해서는 안됩니다 .
zero0cool

136

이 목적으로 CURL을 사용할 수 있습니다. 예제 코드를 참조하십시오.

$url = "your url";    
$content = json_encode("your data to be sent");

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
        array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $content);

$json_response = curl_exec($curl);

$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

if ( $status != 201 ) {
    die("Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error($curl) . ", curl_errno " . curl_errno($curl));
}


curl_close($curl);

$response = json_decode($json_response, true);

1
JSON보다 더 많은 값이 있습니다. 예, JSON 값도 있습니다. 이제 어떻게해야합니까? 게시 할 세 가지 값이 있습니다 : title = somevalue & hash = somevalue & json = JSON VALUE. 이제 PHP를 사용하는 방법은 무엇입니까?
LIGHT

1
이것은 내 상황에서 작동하지 않았습니다 ( stackoverflow.com/questions/34021817/… ). 내 nodejs가 {}를 받았습니다. 왜 그런지 아십니까?
Fane

file_get_contents방법 과 기본 방법 을 벤치마킹 하면 거의 동일한 속도입니다
Brian Leishman


@LIGHT- 이전에 $content = http_build_query( array( 'key1' => 'value1', 'key2' => 'value2', 'json' => json_encode($array_to_become_json) ) );준비한 곳 $array_to_become_json = array(...).
ToolmakerSteve 2019

0

사용 CURL luke :) 진지하게, 그것은 그것을하는 가장 좋은 방법 중 하나이며 응답을 얻습니다.


10
컬은 항상 사용할 수 없습니다 ... 가끔은 ...는 구식 방법을 할 필요가
벤자민 엑스타인

0

그주의 file_get_contents의 솔루션을하지 예상대로 연결하지 닫으면 서버 반환 연결 닫기 는 HTTP 헤더한다.

반면 CURL 솔루션은 연결을 종료하므로 PHP 스크립트가 응답을 기다리면서 차단되지 않습니다.


훌륭한 관찰
nensamuel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.