将CURL用于GET请求时出错“HTTP code 405 Method not method”

时间:2016-06-09 11:52:48

标签: php ajax curl

我想通过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 Dev工具捕获)显示在图像中。  ![1]:http://i.stack.imgur.com/XW8k1.png

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

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

更新:我写了一个AJAX请求来获取本地服务器(localhost)中的数据,并收到此错误:“Cross-Origin Request Blocked”。这意味着我无法从localhost向其他域(api.example.com)发出请求。是否有任何变通方法或黑客来从该服务器获取响应内容?

2 个答案:

答案 0 :(得分:0)

我在Postman中遇到此错误。就我而言,这是因为我本应该使用POST时正在使用GET。我也使用GET参数而不是POST参数。检查正确的方法(在我的Java代码中指定)并使用邮递员中的“代码”按钮显示curl CLI可以帮助我。

答案 1 :(得分:-1)

  1. 尝试在您的请求中发送User-Agent。
  2. 如果您请求的页面需要任何授权,那么您需要发送带有身份验证数据的Cookie。