我需要使用PHP下载xml文件。我可以通过在进行卷曲调用时设置以下选项来读取文件的内容。
curl_setopt ($http, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($http, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($http,CURLOPT_USERAGENT,'XYZ');
从上面的代码片段可以看出,我需要将VERIFYHOST设置为false,并且还需要在调用读取文件时设置显式的USERAGENT,因为该文件不可公开访问,只有特定的应用程序可以调用它来读取它(网络安全技术和东西)
但是如何下载相同的文件,我尝试了readfile
,fopen/fpassthru
,file_get_contents
但似乎没有任何效果。
Readfile提供错误failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden
有没有办法为fopen
或readfile
提供类似curl的选项,我认为这可能是解决此问题的最简单方法。我在PHP文档中找不到太多帮助。
请帮忙。
答案 0 :(得分:3)
您需要将特殊用户代理附加到流上下文。
来自http://www.php.net/manual/en/wrappers.http.php
允许使用HTTP GET方法通过HTTP 1.0对文件/资源进行只读访问。 Host:标头随处理请求一起发送,以处理基于名称的虚拟主机。 如果您已配置user_agent string using your php.ini file或流上下文,则它也会包含在请求中。
上面链接中的示例#2:
<?php
ini_set('user_agent', "PHP\r\nX-MyCustomHeader: Foo");
$fp = fopen('http://www.example.com/index.php', 'r');
?>