当我尝试发出请求时,我收到请求标头问题。这是一个CORS问题, 我已经尝试了许多以前给出的堆栈溢出答案。但没有运气。我还在同一页。
当我尝试使用Advanced Rest Client Extension时,它的工作正常。我不确定是什么问题。所以任何帮助都表示赞赏。
下面是我尝试使用AJAX的“获取”请求,
$.ajax({
xhrFields: {
withCredentials: true
},
headers:{'ApiKey':"ENTERED API KEY HERE"},
//dataType: 'jsonp', when I try this browser is able to send GET request but without request headers, hence I am receiving 401
type: "GET",
url: "https://www.spyfu.com/apis/kss_api/kss_kws?q=real estate&r=10"
}).done(function (data) {
console.log(data);
});
//same using xml http request
var apiKey = '7d8eeec2XXXXXXXXXXXXXXXXX';
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://www.spyfu.com/apis/kss_api/kss_kws?q=real estate&r=10", true);
xhr.setRequestHeader("apikey", apiKey);
xhr.withCredentials = true;
xhr.onload = function () {
console.log(xhr.responseText);
};
xhr.send();
PHP代码:
function httpGet()
{
$keyword = 'real estate';
$resultCount = 20;
$apiUrl = 'https://www.spyfu.com/apis/kss_api/kss_kws?q='.$keyword.'&r='.$resultCount;
$apiKey = '7d8eeec2-xxxxxxxxxxxxxxxxxx';
$ch = curl_init();
print_r(' '.$apiUrl);
print_r($apiKey);
curl_setopt($ch,CURLOPT_URL,$apiUrl);
//curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'ApiKey: '.$apiKey
));
$output=curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
print curl_error($ch);
curl_close($ch);
echo "<pre>".htmlspecialchars($output)."</pre>";
echo 'HTTP code: ' . $httpcode;
return $output;
}
$response = httpGet();
更新:我不应该问这个问题。得到答案后,我想删除这个问题。但是我不会这样做,因为我相信我的问题可能会遇到一个问题,如果他不知道这个事实,为什么我在浏览器中遇到CORS问题而不是在扩展中 Quentin已经给出了明确的解释。在Why does Ajax give me a cross origin error when I can make the request from PHP?
所以在知道了这一点之后,我尝试使用PHP代码,但猜猜我得到了这个问题“SSL证书问题:证书链中的自签名证书”。不要惊慌,清除这个问题很简单。只需更新 cacert.pem 即可。由于我使用Xampp进行wordpress开发,我在本地机器上更新了。请按照answer
进行操作希望这个更新可以帮助某人在10分钟而不是3小时内解决他的问题,就像在我的情况下LOL一样;)
非常感谢 Quentin 让我知道此信息