当前位置: 首页 > 知识库问答 >
问题:

禁止狂饮7 - 403(适用于卷发)

郭志泽
2023-03-14

更新:似乎用户代理并不是某些主机提供HTML所需的唯一标头,我还必须添加“accepts”标头,最终这为我解决了许多主机的问题:

  $response = $client->request('GET', 'http://acme.com', ['headers' => ['user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
'accept'=> 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
        ]]);

我试图使用Guzzle来检索一些网站,但收到了403禁止错误(当它们在浏览器中工作正常时),我怀疑这是由于主机禁止了非标准的用户代理。为了解决这个问题,我试图在Guzzle中设置用户代理来模仿浏览器,但是我找不到任何有效的方法。我可以浏览网站,也可以使用WGET和CURL -L下载HTML,没有任何问题,所以这个问题似乎与Guzzle有关。

我试过了:

    $client = new Client(['allow_redirects' => ['track_redirects' => true]]);
    $client->setUserAgent("Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36");
    $response = $client->get($domain_name);

奇怪的是,这^ 一个导致一个错误,似乎说Guzzle正在尝试浏览到User-Agent值:cURL错误6:无法解析主机:Mozilla(参见 https://curl.haxx.se/libcurl/c/libcurl-errors.html)为Mozilla / 5.0(Windows NT 6.2;WOW64) AppleWebKit/537.36 (KHTML, like

    $domain_name = 'http://www.' . $domain_name;
    $client = new Client(['headers' => ['User-Agent' => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36']]);
    $response = $client->get($domain_name);

^导致“客户端错误:GET http://www.xxx.co.uk 导致'403 禁止访问'”错误

    $domain_name = 'http://www.' . $domain_name;
    $client = new Client(['allow_redirects' => ['track_redirects' => true]]);
    $client->setServerParameter('user-agent', "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36");
    $response = $client->get($domain_name);

^导致"Argument 3传递给GuzzleHttp\Client::请求()必须是数组类型,字符串给定"错误

    $domain_name = 'http://www.' . $domain_name;
    $client = new Client(['allow_redirects' => ['track_redirects' => true]]);
    $client->setHeader("user-agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36");
    $response = $client->get($domain_name);

^这还会导致“传递给GuzzleHttp\Client::request()的参数3必须是数组类型,字符串给定”错误

有什么建议吗?我想我在这里掉进了一个兔子洞!

我想知道这里是否发生了其他事情,因为据我所知,Guzz只是CURL的包装器,CURL可以从同一个IP毫无问题地获取相同的网页。

共有1个答案

司马昕
2023-03-14

似乎用户代理并不是一些主机提供HTML所需的唯一标头,我还必须添加“accepts”标头,最终这为我解决了许多主机的问题:

$response = $client->request('GET', 'http://acme.com', [
  'headers' => [
    'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
    'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
  ]
]);
 类似资料:
  • 我在使用Debian 7的笔记本电脑上遇到了403禁止错误 nginx错误日志显示: 2013/07/05 16:27:06[错误]7351#0:*12目录索引“/var/www/install/”被禁止,客户端:127.0.0.1,服务器:localhost,请求:“get/install/http/1.1”,主机:“localhosts” phpinfo工作正常 worker_processe

  • 在我的覆盆子,我已经建立了一个新的网站,与一些php页面。 HTML所有的工作都很好,但是php页面,它只是抛出一个“403禁止”错误。 文件和目录的权限似乎是开放的,他们可以...有什么想法,我还需要检查什么?

  • 我试图使用mongorestore命令恢复Cosmos上转储的数据库,但不幸的是,它抛出了如下错误: 运行创建命令时出错:(未经授权)错误 = 13,详细信息 ='响应状态代码不表示成功:禁止访问 (403);子状态: 0;活动 Id: 421d33eb-dea0-4372-92b0-ece63fd2b357;原因:(不允许通过 Azure Cosmos DB 终结点对资源'dbs'执行'POST

  • 问题内容: 我最近尝试使用Apache设置测试服务器。该站点必须在domain下运行。我总是会出错。我使用的是Ubuntu 10.10服务器版本。doc根目录在dir下。以下是我的设置: / var / www的内容 服务器上主机文件的内容(IP 192.168.2.5) 网站配置 我的文档根目录中没有文件。权限设置正确(可通过www-data读取)。 如果我从桌面输入IP地址,则该站点将正确显示

  • 问题内容: 我有一个合作伙伴,已经为我创造了一些内容供您抓取。 我可以使用浏览器访问该页面,但是当尝试使用user时,会显示。 我尝试使用,但这无济于事-可能是因为我不知道该去哪里。 1)我有什么办法可以刮取数据? 2)如果否,并且不允许合作伙伴将服务器配置为允许我访问,该怎么办? 我尝试使用的代码: 问题答案: 这不是您脚本中的问题,而是合作伙伴Web服务器安全性中的一项功能。 很难确切地说出是

  • 问题内容: 我正在尝试制作Sitecraper。我是在本地计算机上制作的,在那儿工作得很好。当我在服务器上执行相同操作时,它显示403禁止错误。我正在使用PHP简单HTML DOM解析器 。我在服务器上收到的错误是这样的: 警告:file_get_contents(http://example.com/viewProperty.html?id=7715888)[function.file- get