带有CORS预检请求的API错误405

时间:2016-09-29 15:55:27

标签: php jquery json api cors

从昨天起,这就是我。我已经阅读了关于这个主题的多个主题,没有任何喜悦。我现在正在对这篇文章感到失望..

所以我正在使用(或尝试使用) skyscanner API - http://partners.api.skyscanner.net/apiservices/pricing/v1.0,如here所述。但是我遇到了旧敌人的错误:

  

XMLHttpRequest无法加载http://partners.api.skyscanner.net/apiservices/pricing/v1.0。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost”访问。响应的HTTP状态代码为405。

jQuery代码

var createCORSRequest = function(method, url) {
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr) {
        // Most browsers.
        xhr.open(method, url, true);
        console.log( "success" );
    } else if (typeof XDomainRequest != "undefined") {
        // IE8 & IE9
        xhr = new XDomainRequest();
        xhr.open(method, url);
        console.log( "XDomainRequest undefined" );
    } else {
        // CORS not supported.
        xhr = null;
        console.log( "CORS not supported" );
    }
      return xhr;
};

var postData = function(method, url, callback) {
    var xhr = createCORSRequest(method, url);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.setRequestHeader('Accept', 'application/json');

    var form = new FormData();
    form.append('apiKey', 'MY API KEY HERE');
    xhr.send(form);

    xhr.onload = function() {
        var responseText = JSON.parse(xhr.responseText);
        callback(responseText);
    };

    xhr.onerror = function() {
        console.log('There was an error!');
    };

    if (!xhr) {
        throw new Error('CORS not supported');
    }
};

postData('POST', 'http://partners.api.skyscanner.net/apiservices/pricing/v1.0', callbackFunc);

你会看到我在使用WAMP的localhost上这样做但是我也尝试了一个实时版本,它出现了同样的错误和看似相同的问题。我已经尝试了几乎所有变量组合,以便在没有快乐的情况下纠正错误。我确信我正在按照关于正确创建会话的指示(here),但我错过了单独发现此会话的能力。

我现在知道(感谢@Rory McCrossan)这个API不支持CORS请求所以我正在改变机智以在PHP中执行服务器端的任务。我不确定我是否应继续在这里发帖或开始一个新问题,不幸的是,这也没有证明是直截了当的。我仍在尝试将相同的标题传递给相同的网址,但现在正反对:

  

HTTP请求失败! HTTP / 1.1 500内部服务器错误

因为我的服务器上没有CURL - 感谢tutorial site on PHP http requests我把它放在一起:

$url = 'http://partners.api.skyscanner.net/apiservices/pricing/v1.0';

// Create map with request parameters
$params = array('apiKey' => 'MY API KEY');

// Build Http query using params
$query = http_build_query($params);

$contextData = array ( 
            'method' => 'POST',
            'header' => 'Content-Type: application/x-www-form-urlencoded'.
                        'Accept: application/xml',
            'content'=> $query );

// Create context resource for our request
$context = stream_context_create (array ( 'http' => $contextData ));
$result = file_get_contents($url, false, $context);

if ($result === FALSE) { echo 'error'; }
var_dump($result);

正如我所说,我收到500内部错误 - 任何人都可以建议它现在是什么......?这感觉好像要跳过很多箍!

0 个答案:

没有答案