使用 CURL 进行 GET 请求时出现错误“HTTP 代码 405 不允许方法”

问题描述 投票:0回答:2

我想通过 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]: https://i.stack.imgur.com/XW8k1.png

我错过了什么?我搜索了很多,但无法解决问题!我知道这个错误的原因之一是对curl使用了未经授权的请求方法,但相应的AJAX调用使用GET方法并获取结果。

出了什么问题?任何帮助将不胜感激。

更新:我编写了一个 AJAX 请求来获取本地服务器(localhost)中的数据,并收到此错误:“跨源请求被阻止”。这意味着我无法从本地主机向不同的域(api.example.com)发出请求。是否有任何解决方法或黑客可以从该服务器获取响应内容?

php ajax curl
2个回答
0
投票

我在 Postman 中收到此错误。就我而言,这是因为我应该使用 POST 时却使用了 GET。我还使用 GET 参数而不是 POST 参数。检查正确的方法(在我的 java 代码中指定)并使用 postman 中的“代码”按钮显示curl CLI 对我有帮助。


-1
投票
  1. 尝试在您的请求中发送用户代理。
  2. 如果您请求的页面需要任何授权,那么您需要发送带有身份验证数据的cookie。
© www.soinside.com 2019 - 2024. All rights reserved.