2015-07-03 4 views
1

У меня есть код, который может использовать POST JSON для API с использованием аутентификации. Мне нужно использовать аутентификацию, но большинство примеров не предоставляют эту информацию.Запрос GET с аутентификацией

POST

public function putTest() { 
    $username = "user"; 
    $password = "pass"; 
    $json_url = "http://api.of.site.com"; 
    $json_string = "[]"; 

    $ch  = curl_init($json_url); 
    $options = array(
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_USERPWD  => "{$username}:{$password}", 
     CURLOPT_HTTPHEADER  => array("Content-type: application/json"), 
     CURLOPT_POSTFIELDS  => $json_string 
    ); 
    curl_setopt_array($ch, $options); 

    $result = curl_exec($ch); 
} 

GET (не работает)

public function getTest() { 
    $username = "user"; 
    $password = "pass"; 
    $json_url = "http://api.of.site.com"; 

    $ch  = curl_init($json_url); 
    $options = array(
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_USERPWD  => "{$username}:{$password}", 
     CURLOPT_HTTPHEADER  => array("Content-type: application/json"), 
    ); 
    curl_setopt_array($ch, $options); 

    $result = curl_exec($ch); 
} 

Что мне не хватает в моей ГЭТ? Кроме того, я хотел бы сохранить его в этом стиле, а не с помощью curl_setopt

EDIT: Для справки, вот версия для командной строки, которая работает

curl -X GET -H "Content-Type: application/json" -H "Accept: application/json" -u "username:pass" "http://api.site.name.com/thingtoget" 

ответ

1

Так столбу CURLOPT_HTTPHEADER => array("Content-type: application/json"), в то время как GET нуждается CURLOPT_HTTPHEADER => array("Accept: application/json"), Имеет смысл чтения сейчас.

public function getTest() { 
    $username = "user"; 
    $password = "pass"; 
    $json_url = "http://api.of.site.com"; 

    $ch  = curl_init($json_url); 
    $options = array(
     CURLOPT_SSL_VERIFYPEER => false, 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_USERPWD  => "{$username}:{$password}", 
     CURLOPT_HTTPHEADER  => array("Accept: application/json"), 
    ); 
    curl_setopt_array($ch, $options); 

    $result = curl_exec($ch); 
} 
1

Вы должны использовать CURLOPT_HTTPAUTH

Используйте CURLOPT_HTTPAUTH, чтобы указать способ аутентификации для HTTP-соединений

http://curl.haxx.se/libcurl/c/CURLOPT_USERPWD.html

+0

Пробовал это, я думаю, что мне не хватает чего-то другого – myol

1

Вам нужно добавить:

curl_setopt($curl_handle, CURLOPT_USERPWD, $username . ':' . $password); 

Пример:

public function call(array $data) 
{ 
    $payload = json_encode($data['payload']); 

    // Initialise the session 
    $curl = curl_init(); 

    // Set API URL 
    curl_setopt($curl, CURLOPT_URL, $data['url']); 
    // Return the transfer as a string of the return value of curl_exec() instead of outputting it out directly 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    // Include the header in the output 
    curl_setopt($curl, CURLOPT_HEADER, true); 
    // Authentication 
    curl_setopt($curl_handle, CURLOPT_USERPWD, 'your_username:and_password'); 
    // Set request method 
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $data['method']); 

    if ($data['method'] == 'POST') { 
     // Do a regular HTTP POST 
     curl_setopt($curl, CURLOPT_POST, true); 
    } 

    if ($data['method'] == 'POST' || $data['method'] == 'PUT') { 
     // The full data to post in a HTTP POST operation 
     curl_setopt($curl, CURLOPT_POSTFIELDS, $payload); 
     curl_setopt($curl, CURLOPT_HTTPHEADER, array(
      'Content-Type: application/json', 
      'Content-Length: ' . strlen($payload) 
     )); 
    } 

    // Execute the request 
    $output = curl_exec($curl); 
    // Close curl resource to free up system resources 
    curl_close($curl); 

    // If connection failed 
    if (! $output) { 
     return 'Curl connection failure.'; 
    } 

    // Output the profile information, includes the header 
    return $output; 
} 
Смежные вопросы