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最简单快速解决办法

Wildfly 允许 OPTIONS 方法但返回 405 Method not allowed

nginx静态html页面接收post请求,报405 not allowed错误