2016-02-22 4 views
-1

Я пытаюсь получить доступ к данным Json из API. Проводите исследования онлайн, но не можете найти нужные ресурсы для руководства. Моя документация предлагает сделать следующее, но какой метод я должен использовать, чтобы вытащить эти данные с помощью PHP. Это то, что у меня есть до сих пор.Доступ к API с помощью PHP

<?php 

$header = array(); 
    $header[] = 'Content-type: application/json'; 

    $header[] = 'Authorization: Basic '.base64_encode('MY_TOKEN_HERE'); 

    $url = "https://.../v1/StoreServices.svc"; 

    $ch = curl_init(); 


      curl_setopt($ch, CURLOPT_URL, $url); 
       curl_setopt($ch, CURLOPT_POST, 1); 
       curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 


    $response = curl_exec($ch); 
    //echo curl_error($ch); 

    if ($response === false){ 
     echo "Failed"; 
     throw new Exception(curl_error($ch), curl_errno($ch)); 
    } 
    print_r($response); 
?> 

Я получаю сообщение об ошибке «Длина, необходимая HTTP-ошибка 411. Запрос должен быть фрагментирован или иметь длину содержимого». ошибка.

Я пробовал использовать curl_setopt ($ ch, CURLOPT_GET, 1); но затем он берет меня прямо к URL-адресу.

Я пробовал это с помощью GET, все еще получаю сообщение об ошибке или ошибку конечной точки.

https://.../v1/StoreServices.svc/Json/Items/

Любые предложения?

Документация предлагает использовать это для заголовков проверки подлинности:

var token = "MY_TOKEN_HERE"; $.ajax ({… beforeSend: function (xhr) { xhr.setRequestHeader("Authorization", "Basic " + btoa(token)); }, …); 

И Пример вызова:

var itemurl = "https://.../Json/Items/"; 
var token = "<your token here>"; 
$.ajax({ 
    type: "GET", 
    beforeSend: function(xhr) { 
    xhr.setRequestHeader("Authorization", "Basic " + btoa(token)); 
    }, 
    url: itemurl, 
    dataType: 'json', 
    async: false, 
    success: function(data, textStatus) { // your actions here }, error:  
    function (xhr, testStatus, errorThrown) { // } }); 
+0

Действительно ли это настоящий URL? –

+1

Нет, это не так. Это фиктивный URL. – thisisbolo

ответ

1

Похоже бэкэндом требует, чтобы вы отправить заголовок длины содержимого. Для этого вам необходимо добавить:

$header[] = 'Content-Length: 0'; 
+0

Я получаю «Конечную точку не найден». ошибка. – thisisbolo

+0

Это означает, что ваш запрос теперь проходит на сервер приложений, поздравляю! Проверьте документацию, которую вы предоставили, или попросите людей, которые предоставляют API, как справиться с этой ошибкой, потому что это специфично для их системы. – Joni

+0

Спасибо за помощь Джони. – thisisbolo

Смежные вопросы