【问题标题】:can't connect to specific website using shell_exec and curl php无法使用 shell_exec 和 curl php 连接到特定网站
【发布时间】:2019-12-29 00:03:10
【问题描述】:

我正在尝试访问此 (https://www.gearbest.com/cell-phones/pp_009969695587.html) 页面,但没有成功。我没有得到任何回应...

<?php

$output = shell_exec('curl -L "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0" https://www.gearbest.com/cell-phones/pp_009969695587.html');
echo $output;

  $html= str_get_html($output);
  echo $html;
  ?>

【问题讨论】:

  • 那么您的 http 服务器的错误日志文件揭示了什么问题?
  • 没有错误一直尝试连接我没有得到响应
  • 对我来说它可以工作(我得到一个 html 页面,上面说这是不允许的)所以它一定是你的网络配置有问题。
  • 也许他们不喜欢人们抓取他们的内容?阅读网站条款和条件?但我也不相信这是一个有效的 cURL 命令。 curl: (6) Couldn't resolve host 'Mozilla'
  • 不允许?但它是一个网页,你的意思是不允许吗?

标签: php curl shell-exec


【解决方案1】:

你忘了检查标准错误。你在 stderr 中得到输出,但我猜你的 stderr 被重定向到你不看的地方(例如,如果你使用 php-fpm+nginx,那么 stderr 通常默认重定向到 nginx 的错误日志)

要么检查您的标准错误,要么通过在命令末尾添加2&gt;&amp;1 将标准错误重定向到标准输出。

为了记录,这是我希望你在 stderr 中得到的(这是我在运行 stderr 时得到的):

curl: (6) Could not resolve host: Mozilla
curl: (56) OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 104

..这不会解决我怀疑是你的实际问题,那个 Gearbeast 正在阻止 curl,但这不是你的问题,所以我想我不会去讨论这个..?

【讨论】:

  • 所以这是一个 ssl 问题?
  • @stefanosn 不,不是。看来他们正在运行一个防火墙来阻止任何看起来不够像网络浏览器的东西,包括你的 curl 请求。一旦您发送了所有标头,并且他们的防火墙确定您的标头看起来不像 Web 浏览器的标头,它就会断开连接,这不是 ssl 问题。
  • 嗯所以我必须发送所有标题然后汉斯好吧我会尝试
【解决方案2】:

基于此答案https://stackoverflow.com/a/31597823/80836,以下似乎可行:

curl 'https://www.gearbest.com/cell-phones/pp_009969695587.html' -H 'authority: www.gearbest.com' -H 'upgrade-insecure-requests: 1' -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' -H 'sec-fetch-mode: navigate' -H 'sec-fetch-user: ?1' -H 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' -H 'sec-fetch-site: none' -H 'accept-encoding: gzip, deflate, br' -H 'accept-language: en-US,en;q=0.9,el;q=0.8' --compressed

【讨论】:

  • 不要手动设置accept-encoding 标头。比如 curl 编译时没有使用br 编码支持(很正常),而服务器实际决定使用 br 编码,那么返回的会是乱码不可读的二进制数据。当使用--compressed 时,curl 将为您设置标题,并使用所有支持的编码(由 curl 编译时间决定)
猜你喜欢
  • 2011-06-03
  • 1970-01-01
  • 2017-10-19
  • 2020-10-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多