PHP 从 URL 获取数据

Posted

技术标签:

【中文标题】PHP 从 URL 获取数据【英文标题】:PHP fetching data from URL 【发布时间】:2018-09-05 01:19:49 【问题描述】:

我在从 URL 获取数据时遇到问题。当我在浏览器文件中输入 URL 时,通常会下载到我的计算机,但是当我尝试在我的代码中访问它时,我得到响应 FALSE,没有错误只是 bool(false) 响应。它是 ICAL 同步的功能,3 或 4 个 url 很好,但那个只是没有获取数据。尝试了 file_get_contentsCURL。这是CURL函数:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch);
    curl_close($ch);

以下是有关服务器的一些信息:

php 版本 = 5.6.10-pl0

allow_url_fopen = 开启

OpenSSL 支持 = 启用

如果这可能是个问题,文件在 HTTPS 服务器上。提前谢谢你们。

【问题讨论】:

如果下载失败,curl 会显示错误代码。请添加此错误代码 @rollstuhlfahrer 这里是:错误:14077410:SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报握手失败 @rollstuhlfahrer 所以我猜这是 SSL 证书的问题,但在我这边还是? sslv3 ???啊。 也可能有帮助:***.com/questions/26759383/… 【参考方案1】:

在此答案中,本地指的是您的服务器,远程指的是另一台(您尝试访问的服务器)。

来自错误信息:

SSL23_GET_SERVER_HELLO:sslv3 警报握手失败

您的客户端和服务器实现似乎无法就要使用的通用密码套件达成一致。这通常意味着一个实现有点过时了。

远程证书没有问题。这会产生不同的错误消息。

检查远程服务器

您可以使用例如SSL Server Test 来确定远程服务器正在使用哪些协议版本和密码。

然后你可以选择其中的一些供 curl 使用(Source for code):

curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'ECDHE-RSA-AES128-GCM-SHA256,...');

检查本地/您的服务器

您说您使用的是 PHP 5.6.10。 这有点过时了。(于 2015 年 6 月 11 日发布)。当前的5.6 版本分支位于 5.6.34。如果我是你,我会考虑升级。

来自 SSL 服务器测试:远程服务器仅接受 TLS1.2。因此,您还应该考虑升级您的 OpenSSL 安装。

更多链接供参考:

https://curl.haxx.se/docs/ssl-ciphers.html

【讨论】:

到目前为止,谢谢你。我从测试服务器得到这个:imgur.com/a/vA2ao。那么使用什么密码列表呢? 这仅显示证书。这与握手过程无关 好,我发现部分与密码和它说:密码套件#TLS 1.2 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(在服务器优选顺序套)但是,当我尝试设置任一此它得到错误:无法设置密码列表。所以我猜我的那个版本的 openssl 的服务器不支持它? 编辑了答案以反映这一点。如果是回答您的问题,please accept it 好的,谢谢@rollstuhlfahrer 所做的一切。关于这个丢失了大约 1-2 小时。

以上是关于PHP 从 URL 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

PHP 从URL获取数据

从 php url 获取数据以在 react native 中保存到本地 sqlite

如何在 php 中创建干净的 url 从 mysql 获取数据?

php – 通过curl从url获取JSON数据

使特定 URL 使用模板文件并使用 PHP 和 .htaccess 从数组中获取特定数据

如何从php服务器获取json数据到android mobile