如何使用PHP通过HTTPS下载文件

3

我需要使用PHP下载一个XML文件。当我通过curl调用该文件,并设置以下选项时,我可以读取文件内容。

curl_setopt ($http, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($http, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($http,CURLOPT_USERAGENT,'XYZ');

如上代码片段所示,我需要将VERIFYHOST设置为false,并在调用读取文件时设置一个显式的USERAGENT,因为该文件不是公共可访问的,只有特定的应用程序才能调用它进行读取(Web安全技术之类的)。
但是我该如何下载同一文件呢?我尝试了readfile、fopen/fpassthru和file_get_contents,但似乎都无法正常工作。Readfile会出现错误“failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden”。
是否可以在fopen或readfile中提供curl类似的选项,我认为这可能是最简单的解决方法。我在PHP文档中找不到太多帮助,请帮忙解答。

你是否提供了关于“你”的头部信息和其他内容? - David Bélanger
@DavidBélanger 只需要常规的 Content-dispositionContent-type 头部信息。 - Harshdeep
您需要发送有关您的头信息:UserAgent 和 IP 地址。 - David Bélanger
1个回答

3
您需要将特定的用户代理附加到流上下文中。
来自http://www.php.net/manual/en/wrappers.http.php

通过HTTP 1.0只读访问文件/资源,使用HTTP GET方法。发送一个Host:头来处理基于名称的虚拟主机。如果您已经使用php.ini文件或流上下文配置了用户代理字符串,它也将包含在请求中。

以上链接中的示例#2:
<?php
ini_set('user_agent', "PHP\r\nX-MyCustomHeader: Foo");

$fp = fopen('http://www.example.com/index.php', 'r');
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接