我正在用 PHP 制作一个 Web 应用程序,并想从另一个域中读取内容。看来我的主要选择是fopen
和curl
。
这两种方法之间的主要区别是什么,尤其是在安全性和可用选项方面?
url 是 http 还是 https 站点是否重要?
Curl 使用外部库,它有更多的功能来自定义请求 - 自定义标头、生成 POST 请求、上传文件。你需要的一切我都必须说。
Fopen 仅限于仅对 url 发出 GET 请求,而无需进一步定制。
至于安全 CURL 不受 PHP 中安全配置的影响(如远程 URL 的禁止 fopen 等)。
这两种可能性都会为您返回数据,您可以以任何可能的方式使用这些数据。如果你在你的项目中制造了一个安全漏洞,那么在获取数据之后毕竟是你的错。
我也不太确定,但我认为 fopen 无法处理 SSL (https) 连接。fopen 和 CURL 都支持 SSL(正如 Andy Shellam 在下面的评论中指出的那样)。
请参阅在 PHP 中使用 fopen($url) 和 curl 之间的重要区别是什么?对于一些影响 fopen 的安全设置,即 allow_url_include。
另外,请注意,如果您使用 curl,如果您设置了 CURLOPT_FOLLOWLOCATION,则 curl 会遵循重定向到 file:// 以获取数据(仍受 open_basedir 约束)。重定向到其他方案,例如 ftp:// 可能会更糟(尚未测试 ftp://)。没有那个 setopt curl 根本不会遵循重定向。fopen 似乎默认使用 302,但只有 http:// -> http:// 而不是http:// -> file://。