wp_remote_post ()를 통해 JSON 문자열 보내기


13

mailchimp 통합을 구축 중이며 JSON 코드로 POST 호출이 필요합니다.

아니요, 실제로 작동 하는이 코드를 사용하고 있습니다 .

$data = wp_remote_post($url, array(
    'headers'   => array('Content-Type' => 'application/json; charset=utf-8'),
    'body'      => json_encode($array_with_parameters),
    'method'    => 'POST'
));

그러나 PHP 경고를 반환합니다.

경고 : http_build_query () : 매개 변수 1은 배열 또는 객체 일 것으로 예상됩니다. 507 행의 ../wp-includes/Requests/Transport/cURL.php에 잘못된 값이 있습니다.

그것을 피하는 방법?

'body'인덱스에서 일반 배열을 사용하려고했지만 MailChimp가 JSON 구문 분석 오류를 반환합니다.


1
이 패치를 코어에 적용 했습니까? core.trac.wordpress.org/ticket/37700
오토

흥미 롭군 상용 플러그인이므로 모든 WP 설치에서 작동해야합니다. 그러나 WP 버그 인 것처럼 보이므로 괜찮습니다. 많은 감사합니다!
a-coder

답변:


16

data_format요청에 다음과 같이 매개 변수를 설정하십시오 .

$data = wp_remote_post($url, array(
    'headers'     => array('Content-Type' => 'application/json; charset=utf-8'),
    'body'        => json_encode($array_with_parameters),
    'method'      => 'POST',
    'data_format' => 'body',
));

형식이 기본값으로 설정 query되어있는 것처럼 보입니다 .이 경우 WordPress는을 사용하여 데이터 형식을 시도 http_build_query합니다. 이미 본문을 문자열로 형식화했기 때문에 문제가 발생합니다. 관련 체크인은 다음과 같습니다 wp-includes/class-http.php.

if (!empty($data)) {
    $data_format = $options['data_format'];

    if ($data_format === 'query') {
        $url = self::format_get($url, $data);
        $data = '';
    }
    elseif (!is_string($data)) {
        $data = http_build_query($data, null, '&');
    }
}

의 507 행에서 오류가 발생 wp-includes/Requests/Transport/cURL.php했으므로 다음에 대한 근본적인 호출임을 알 수 있습니다 http_build_query.

protected static function format_get($url, $data) {
    if (!empty($data)) {
        $url_parts = parse_url($url);
        if (empty($url_parts['query'])) {
            $query = $url_parts['query'] = '';
        }
        else {
            $query = $url_parts['query'];
        }

        $query .= '&' . http_build_query($data, null, '&');
        $query = trim($query, '&');

        if (empty($url_parts['query'])) {
            $url .= '?' . $query;
        }
        else {
            $url = str_replace($url_parts['query'], $query, $url);
        }
    }
    return $url;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.