Php “错误”;不允许使用HTTP代码405方法";对GET请求使用CURL时
我想通过CURL获取GET请求的响应,但得到错误“HTTP/1.1 405 Method Not Allowed”,并且没有返回任何内容(头除外)。 下面是我的代码Php “错误”;不允许使用HTTP代码405方法";对GET请求使用CURL时,php,ajax,curl,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" $option
$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)中的数据,但出现了以下错误:“跨源请求被阻止”。这意味着我不能从localhost向其他域(api.example.com)发出请求。从该服务器获取响应内容是否有任何变通方法或黑客攻击
我在《邮递员》中看到了这个错误。在我的例子中,这是因为我在使用GET,而我本应该使用POST。我还使用了GET参数而不是POST参数。检查正确的方法(在我的java代码中指定)并使用postman中的“code”按钮来显示curl CLI对我很有帮助。我在postman中遇到了这个错误。在我的例子中,这是因为我在使用GET,而我本应该使用POST。我还使用了GET参数而不是POST参数。检查正确的方法(在我的java代码中指定)并使用postman中的“code”按钮来显示curl CLI对我很有帮助。
'Content-Type:application/json;字符集=utf-8',
-为什么会有这样的字符集?您正在发出GET请求。没有用于描述的内容类型的请求正文。'Access-Control-Allow-Origin:http://localhost:14189“,
-你为什么有这个<代码>访问控制允许源站不是请求头。它只是一个响应头。'Access-Control-Allow-Credentials:true'
-Ditto@Quentin您好,这些选项是在ajax调用中设置的(您可以在图像[link]()的请求头部分中看到它们)。我第一次尝试了没有这些选项的curl,但仍然得到了相同的错误。JavaScript当时也是错误的。'Content-Type:application/json;charset=utf-8',
-为什么会这样?您正在发出get请求。没有请求正文来描述的内容类型。'Access-Control-Allow-Origin:http://localhost:14189’,
-为什么会这样?访问控制允许源文件
不是请求头文件。它只是响应头文件。'Access-Control-Allow-Credentials:true'
-Ditto@Quentin您好,这些选项是在ajax调用中设置的(您可以在图像[link]()的请求头部分中看到它们)。我第一次尝试了没有这些选项的curl,但仍然得到了相同的错误。JavaScript当时也是错误的。这应该是对OP的注释,而不是答案,除非您对此进行扩展。@marv255 Hi,tnx供您参考。我包括了CURLOPT_USERAGENT和CURLOPT_COOKIE选项,但问题仍然存在。:(您是否有可能在您使用curl请求的站点上看到web服务器的日志?这应该是对OP的评论,而不是回答,除非您对此进行详细说明。@marv255 Hi,tnx供您参考。我包括了CURLOPT_USERAGENT和CURLOPT_COOKIE选项,但问题仍然存在。:(您是否有可能在使用curl请求的站点上查看web服务器的日志?