我想通过 CURL 获取 GET 请求的响应,但收到错误“HTTP/1.1 405 Method Not allowed”并且没有返回任何内容(标头除外)。 以下是我的代码。
$url = "http://api.example.com/Q5PLCmwYzho=/7avEU7ptYyummfheg9!0KA==?aqPI=93566&aqIIO=false&aqIP=false&aqSK=0&aqTK=14&aqSO=date&aqCI=0"
$options = array(
CURLOPT_URL => $url,
CURLOPT_HTTPGET => true, //set request type post or get
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => true,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36',
CURLOPT_HTTPHEADER => array(
'Accept: application/json, text/javascript, */*; q=0.01',
'Accept-Encoding: gzip, deflate, sdch',
//'Content-Type: application/json; charset=utf-8',
//'Access-Control-Allow-Origin: http://localhost:14189',
//'Origin: http://www.example.com',
//'Host: api.example.com',
//'Access-Control-Allow-Credentials: true',
),
CURLOPT_COOKIE => 'Cookie:scarab.profile=%2293566%7C1465411024%22; scarab.mayAdd=%5B%7B%22i%22%3A%2293566%22%7D%2C%7B%22i%22%3A%22117313%22%7D%5D; _ceg.s=o8gwtw; _ceg.u=o8gwtw; _gat=1; _dc_gtm_UA-13212406-1=1; DK-Client=CWUU,09b6ab76-f662-48b3-a1e6-f08779519236; __auc=764bbe2e155314db7ac1a950571; scarab.visitor=%22566B1DCD74FCD3A5%22; _ga=GA1.2.412464545.1465411024'
);
$ch = curl_init();
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err; //no error!
$header['errmsg'] = $errmsg;
$header['content'] = json_decode($content); // no content!
echo $response['http_code']; //output: 405
我检查了网页中相应的ajax请求,每个curl选项似乎都设置正确。详细信息(从 chrome 开发工具捕获)如图所示。 ![1]:
我错过了什么?我搜索了很多,但无法解决问题!我知道这个错误的原因之一是对curl使用了未经授权的请求方法,但相应的AJAX调用使用GET方法并获取结果。
出了什么问题?任何帮助将不胜感激。
更新:我编写了一个 AJAX 请求来获取本地服务器(localhost)中的数据,并收到此错误:“跨源请求被阻止”。这意味着我无法从本地主机向不同的域(api.example.com)发出请求。是否有任何解决方法或黑客可以从该服务器获取响应内容?
我在 Postman 中收到此错误。就我而言,这是因为我应该使用 POST 时却使用了 GET。我还使用 GET 参数而不是 POST 参数。检查正确的方法(在我的 java 代码中指定)并使用 postman 中的“代码”按钮显示curl CLI 对我有帮助。