首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php curl头不会从网站返回?

php curl头不会从网站返回?
EN

Stack Overflow用户
提问于 2018-11-03 07:52:15
回答 3查看 510关注 0票数 3

我使用这个命令从这个特定的页面获取页眉。

代码语言:javascript
复制
curl -I https://www.gearbest.com/mobile-phones/pp_1686789.html?wid=1817324

我从终端运行上面的命令,并得到以下结果...

代码语言:javascript
复制
HTTP/2 200
content-type: text/html; charset=UTF-8
pragma: public
last-modified: Fri, 02 Nov 2018 18:15:13 GMT
gbcdnlang: en
access-control-allow-origin: *
access-control-allow-methods: GET, POST
ng-cache: HIT
x-edgeconnect-midmile-rtt: 36
x-edgeconnect-origin-mex-latency: 137
cache-control: public, max-age=60
expires: Fri, 02 Nov 2018 23:39:15 GMT
date: Fri, 02 Nov 2018 23:38:15 GMT
set-cookie: ORIGINDC=3;Domain=.gearbest.com;Path=/
set-cookie: ORIGINDCPC=3;Domain=.gearbest.com;Path=/
set-cookie: AKAM_CLIENTID=d51abedb38c60f8a5217ae15808769fc; expires=Mon, 31-Dec-2038 23:59:59 GMT; path=/; domain=.gearbest.com
vary: User-Agent

到目前一切尚好。但是当我尝试使用下面的代码在php中实现时,我得到了"URL不存在“!我做错了什么?感谢您的帮助。

代码语言:javascript
复制
  $url1 = "https://www.gearbest.com/mobile-phones/pp_1686789.html?wid=1817324";
  $curl1 = curl_init($url1);
  curl_setopt($curl1, CURLOPT_NOBODY, true);
  curl_setopt($curl1, CURLOPT_CONNECTTIMEOUT, 0);
  curl_setopt($curl1, CURLOPT_TIMEOUT, 5); //timeout in seconds


  $result1 = curl_exec($curl1);

  if ($result1 !== false)
  {
    $statusCode1 = curl_getinfo($curl1, CURLINFO_HTTP_CODE);
    if ($statusCode1 == 404)
    {
      echo "URL Not Exists";
    }
    else
    {
       echo "URL Exists";
    }
  }
  else
  {
    echo "URL not Exists";
  }
EN

回答 3

Stack Overflow用户

发布于 2018-11-06 02:47:19

首先,您发布的代码是有效的。你不需要修改它。

如果你只是和ex一起试一下。https://www.google.com它可以工作。

问题是您的PHP版本使用LibreSSL进行php-curl HTTPS连接。

在使用OpenTransport.的macOS上,我也遇到了同样的问题

您要连接的网站要求以LibreSSL无法处理的方式建立SSL连接。

您需要编译/安装PHP OpenSSL,并在已编译的解释器上运行代码,以便将其用于php-curl。

更新:

因为你使用的是macOS,所以你可以从源代码编译。用谷歌搜索macos compile php from source会返回一个“菜谱”列表。

如果您使用brew编译PHP (以及所有"web应用程序堆栈“),您可以查看以下内容:

这个问题(和答案)还解决了一个与您问题中的问题类似的问题。

票数 2
EN

Stack Overflow用户

发布于 2018-11-05 07:00:44

我想这不是你的问题。我认为当通过PHP请求某些东西时,他们会阻止它。当您使用file_get_contents时,您将获得以下输出。

代码语言:javascript
复制
Warning: file_get_contents(): SSL: Operation timed out in /test.php on line 2
Warning: file_get_contents(https://www.gearbest.com/mobile-phones/pp_1686789.html?wid=1817324): failed to open stream: HTTP request failed!  in /test.php on line 2

当您在脚本中使用以下url时,它可以正常工作(https://www.test.de)。

我已经用你的脚本做了一些其他测试,但每次我都会得到一个结果和你的异常结果。

票数 0
EN

Stack Overflow用户

发布于 2018-11-05 07:13:32

尝试添加CURLOPT_SSL_VERIFYPEER选项,它通过SSl连接,但会检查证书,如下所示:

代码语言:javascript
复制
<?PHP
  $handle=curl_init('https://www.google.com');
  curl_setopt($handle, CURLOPT_VERBOSE, true);
  curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
  $content = curl_exec($handle);
  echo $content;
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53127113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档