2012-07-17 103 views
3

我需要使用PHP下载一个xml文件。我可以通过设置下列选项来读取文件的内容,当对它进行卷曲调用时。如何使用php通过https下载文件

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

从上面的代码中,我需要做VERIFYHOST为假,还需要打电话时,设置明确的USERAGENT读取文件,因为文件是不能公开访问,只有特定的应用程序可以拨打电话可以明显看出读它(网络安全技术和东西)

但是我怎么下载同一个文件,我已经试过readfilefopen/fpassthrufile_get_contents但似乎没有奏效。 READFILE给出了错误failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden

是否有提供卷曲像fopenreadfile选项的方式,我认为这可能是解决这个问题的最简单的方法。我在PHP文档中找不到任何帮助。

请帮忙。

+0

你提供有关 “您” 页眉和东西? – 2012-07-17 19:35:12

+0

@DavidBélanger就像通常的“Content-disposition”和“Content-type”标题。 – Harshdeep 2012-07-17 19:37:42

+0

您需要发送关于您的标题:UserAgent和IP地址。 – 2012-07-17 19:38:37

回答

3

您需要将您的特殊用户代理附加到流上下文。

http://www.php.net/manual/en/wrappers.http.php

允许只读经由HTTP 1.0到文件/资源​​的访问,使用HTTP GET方法。主机:头与请求一起发送以处理基于名称的虚拟主机。 如果您已配置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'); 
?> 
+0

感谢'ini_set'做到了诀窍。 – Harshdeep 2012-07-17 20:22:38