php curl请求返回'405 Not Allowed',有没有其他的抓取方法?
Posted
技术标签:
【中文标题】php curl请求返回\'405 Not Allowed\',有没有其他的抓取方法?【英文标题】:Php curl request returns '405 Not Allowed', Is there any other method for scraping?php curl请求返回'405 Not Allowed',有没有其他的抓取方法? 【发布时间】:2019-08-22 09:45:19 【问题描述】:我正在使用 php curl,我的代码适用于其他网站,但是当我请求此 url https://i.local.ch/#q?q=manager&origin=&rid=ac8EV&sort=relevance
时,它返回:
405 不允许 nginx
注意:SSl 在我的域中处于活动状态
include "simple_html_dom.php";
$url="https://i.local.ch/#q?q=manager&origin=&rid=ac8EV&sort=relevance";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
$info = curl_getinfo($ch);
print_r( $info );
echo var_dump($server_output);
【问题讨论】:
您确定应该是POST
而不是GET
,因为您实际上并没有发送任何数据?
感谢您的回复:我有同一个网站的 40 个网址。所以我需要发送任何数据吗?
“所以我需要发送任何数据” - 我们无法回答。我们不知道那个网站。我的意思是,如果您没有同时传递任何数据(例如发布表单或类似信息),则使用POST
访问页面并不常见。因此,如果您只想获取一个页面,通常通过GET
-request 完成。而 "405 - Method not allowed" 表示您根本无法使用 POST
-request 访问该页面。
【参考方案1】:
HTTP 405 错误是由于 Web 服务器不允许 HTTP 方法用于请求的 URL。
从浏览器发出相同的请求并检查请求标头。确保在发出请求时使用正确的方法 get、post 或 put。还要检查是否有任何额外的标头随请求一起发送,因为某些 url 只允许来自 ajax 请求,您可以通过在请求中添加适当的标头来实现这一点。
您可以使用以下方法发送其他标头
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"Accept-Charset" => "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
"Keep-Alive" => "115",
"Connection" => "keep-alive",
"X-Requested-With" => "XMLHttpRequest"
));
【讨论】:
以上是关于php curl请求返回'405 Not Allowed',有没有其他的抓取方法?的主要内容,如果未能解决你的问题,请参考以下文章
ApacheIISNginx等绝大多数web服务器,都不允许静态文件响应POST请求,否则会返回“HTTP/1.1 405 Method not allowed”错误。
为啥此请求返回 405 Method Not Allowed?
Spring MVC PUT 请求返回 405 Method Not Allowed
Nginx 405 not allowed最简单快速解决办法