📌  相关文章
📜  file_get_contents url 失败 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:00:45.124000             🧑  作者: Mango

file_get_contents url失败 - TypeScript

在 TypeScript 中,我们可以使用 file_get_contents() 函数来获取远程 URL 的内容。但是,有时候会发生 URL 请求失败的情况,本文将介绍如何处理这种场景。

错误信息

file_get_contents() 函数无法获取 URL 的内容时,它会返回 false,同时可能会输出一些错误信息。我们可以将这些错误信息捕捉,并进行相关处理。

以下是一个获取远程 URL 内容的示例代码:

const url = 'https://example.com';
const content = file_get_contents(url);
if (!content) {
  console.log(error_get_last());
}

运行后,如果 URL 请求失败,将会输出类似如下的错误信息:

{
  "type": 2,
  "message": "file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:\nerror:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed\nfile_get_contents(https://example.com): failed to open stream: Operation now in progress",
  "file": "/path/to/file",
  "line": 3
}
失败原因

常见的 URL 请求失败原因包括:

  • 网络问题:包括 DNS 解析失败、与远程服务器连接超时等。
  • 安全问题:例如,远程服务器证书未通过验证,在使用 HTTPS 协议时可能会出现这种情况。
解决方案

处理 URL 请求失败的方案比较多,可以针对具体的失败原因做出不同的响应。

以下是针对一些常见失败原因的解决方案:

DNS 解析失败

可以尝试使用 IP 地址替代域名来请求远程 URL,例如:

const url = 'https://example.com';
const ip = gethostbyname('example.com');
if (!ip) {
  console.log('Could not resolve IP address for example.com');
} else {
  const content = file_get_contents(`https://${ip}`);
}

连接超时

可以尝试增加请求超时时间,例如:

const url = 'https://example.com';
stream_set_timeout(5);
const content = file_get_contents(url);

安全问题

在使用 HTTPS 协议时,如果远程服务器证书未通过验证,需要安装相关证书并配置 PHP。

具体方法可参考 PHP 入门教程之 SSL/TLS 加密通信中的证书验证 一文中的“使用 cacert.pem 证书文件”章节。

参考链接