Github API v3 POST с PHP

Я пытаюсь использовать Github v3 API и размещаю JSON для обновления профиля (или другого вызова) и получаю следующий ответ от Github;

Array
(
    [message] => Body should be a JSON Hash 
)

Я просмотрел соответствующую страницу в документации по API: http://developer.github.com/v3/users/

И эта страница: http://developer.github.com/v3/#http-verbs, который охватывает POST / PATCH

Вот код, который я использую

$data = array("bio" => "This is my bio" );
$data_string = json_encode($data); 

function curl($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);  

    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,1);
    curl_setopt($ch, CURLOPT_USERPWD, "USERNAME:PASSWORD");
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);   
    $content = curl_exec($ch);
    curl_close($ch);
    return $content;
}

$result = json_decode(curl('https://api.github.com/user'),true);

Я также пробовал CURLOPT_CUSTOMREQUEST как 'POST' и 'PATCH', но получил одинаковый ответ об ошибке для обоих.

Может ли кто-нибудь указать мне правильное направление для публикации данных в API?


person Steve Wanless    schedule 10.05.2012    source источник


Ответы (2)


Вы должны либо global $data_string, либо передать переменную $data_string в curl() для повторного использования.

Пример:

function curl($curl, $data)
{
    $data_string = json_encode($data);
    // your code here
}
person Christoph Winkler    schedule 10.05.2012
comment
Вау ... как я это посмотрел !! Спасибо. - person Steve Wanless; 12.05.2012

Вы должны указать заголовок следующим образом:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
person Matthew Flaschen    schedule 10.05.2012