我用curl从biorxiv网站获取数据。这不是非法工作。
在初始化过程中,将调用一个新函数。
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://www.biorxiv.org/search/electron+microscopy+jcode%3Abiorxiv+limit_from%3A2021-11-08+limit_to%3A2021-11-10+numresults%3A75+sort%3Arelevance-rank+format_result%3Astandard,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
我用了这段代码,这在我的 Postman 中运行得很好,但在服务器上不起作用。我现在看到了这个错误的消息。
enter image description here
如何解决此问题?
谢谢你,谢谢你
4条答案
按热度按时间eit6fx6z1#
好吧,你遇到的是一个僵尸检测系统。Cloudflare使用它来防止非人类的DDoS攻击。在这种情况下,这意味着你将不能使用curl的这种方式,因为这些检查专门试图非常全面的工作浏览器。你可以暂时绕过它从您的浏览器复制cookie,这不会持续很长时间,因为这些会定期刷新。
顺便说一句,Postman是在Chrome上运行的,因此不太可能触发bot检测。
kg7wmglp2#
以下是CloudFlare背后的URL示例:https://www.lendingtree.com/forms/mortgage/pecan/refi_hdl2b_ltv
在Chrome的incognito窗口中运行良好。当我将请求复制为cURL,从同一台机器的命令窗口中将其 curl 时,我得到403。 curl 请求:
怎么回事?
8mmmxcuj3#
Cloudflare使用TLS指纹识别来筛选不需要的流量。
yftpprvb4#
Cloudflare对您的请求(TCP/TLS/HTTP)进行指纹识别,并阻止任何它认为不寻常的内容。
同样值得注意的是,Cloudflare等平台中的bot检测正在不断改进,因此无论您今天找到什么解决方案,它都有可能在某个时候随机停止工作。
如果你真的没有做什么奇怪的事情,那么我建议你看看像watir或nerodia这样的东西。如果需要的话,你可以在无头模式下运行它们,它们使用你选择的任何浏览器的完整版本。