【问题标题】:Curl is giving me access deniedCurl 拒绝访问
【发布时间】:2019-06-22 22:37:53
【问题描述】:

我使用 Curl -dump-header 但我也被拒绝访问。有什么方法可以连接获取html代码吗?

Curl --dump-header - https://www.gearbest.com/car-charger/pp_009363232829.html

> HTTP/2 403  server: AkamaiGHost mime-version: 1.0 content-type:
> text/html content-length: 314 cache-control: max-age=60 expires: Sat,
> 22 Jun 2019 22:25:51 GMT date: Sat, 22 Jun 2019 22:24:51 GMT
> set-cookie: AKAM_CLIENTID=7e3530d888ae97fef4ad26c997d733c5;
> expires=Mon, 31-Dec-2038 23:59:59 GMT; path=/; domain=.gearbest.com
> vary: User-Agent

<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>

You don't have permission to access "http&#58;&#47;&#47;www&#46;gearbest&#46;com&#47;car&#45;charger&#47;pp&#95;009363232829&#46;html" on this server.<P>
Reference&#32;&#35;18&#46;85451502&#46;1561242291&#46;25f21039
</BODY>
</HTML>

如果我使用浏览器访问该页面,它可以正常工作。我只想获取页面的html代码。任何帮助表示赞赏。

【问题讨论】:

  • 您是否尝试将用户代理更改为看起来更像浏览器的东西? cyberciti.biz/faq/curl-set-user-agent-command-linux-unix
  • 让我检查一下!
  • @alx 是的,这行得通... curl -A "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0" gearbest.com/car-charger/pp_009363232829.html 。在 php 中不起作用 :( $curl1 = curl_init(); $url="gearbest.com/car-charger/pp_009363232829.html"; curl_setopt($curl1, CURLOPT_URL, $url); curl_setopt($curl1, CURLOPT_CONNECTTIMEOUT, 20); curl_setopt($curl1, CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0'); $str = curl_exec($curl1); 对 php 问题有什么想法吗?
  • 您能否修改您的问题并添加您的 PHP 代码,以及 PHP 返回的任何响应或错误消息?

标签: curl


【解决方案1】:

这是你修改的 PHP 代码,它工作得非常好(经过测试):

<?php
$curl1 = curl_init();
$url = "https://gearbest.com/car-charger/pp_009363232829.html";
curl_setopt($curl1, CURLOPT_URL, $url);
curl_setopt($curl1, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($curl1, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0');
curl_setopt($curl1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl1, CURLOPT_FOLLOWLOCATION, true);
$str = curl_exec($curl1); 
echo $str;

几点说明:

  • 您希望 curl_exec() 返回 HTML 代码,但如果不先设置 CURLOPT_RETURNTRANSFER 选项,则不会发生这种情况
  • 网站通常使用重定向(例如,如果您省略它,GearBest 会重定向到 www.),要正确处理,您需要设置 CURLOPT_FOLLOWLOCATION 选项

【讨论】:

  • 这是我的代码,但最后检查 ssl 错误... $curl1 = curl_init(); $url="gearbest.com/car-charger/pp_009363232829.html"; curl_setopt($curl1, CURLOPT_URL, $url); curl_setopt($curl1, CURLOPT_HEADER, true); curl_setopt($curl1, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl1, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl1, CURLOPT_CONNECTTIMEOUT, 20); curl_setopt($curl1, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2');我收到错误 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60
  • 这是一个非常普遍的错误,可能意味着广泛的事情(我可以​​从谷歌结果中得出结论)。您是否在某些代理或 vpn 后面?这可能是原因。在您问之前,浏览器使用不同的 SSL 堆栈可能(或可能不会)对网络细节做出不同的反应。
  • 更正:我的答案中的代码按预期工作,我看到了商店页面 HTML(以前在 Windows 机器上尝试,它失败了,在 macOS 上尝试,它工作正常)。所以,我几乎可以肯定问题出在您的 PHP/CURL/网络配置中。试试不同的机器?
  • 我也在mac上!这让我发疯了。
  • 好吧,我的 PHP 来自 brew,它可以工作。可能也适合你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
相关资源
最近更新 更多