【问题标题】:How to download a file over https using php如何使用 php 通过 https 下载文件
【发布时间】:2012-07-16 19:01:21
【问题描述】:

我需要使用 PHP 下载一个 xml 文件。在进行 curl 调用时,我可以通过设置以下选项来读取文件的内容。

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

从上面 sn-p 可以明显看出,我需要将 VERIFYHOST 设置为 false,并且还需要在调用读取文件时设置显式 USERAGENT,因为该文件不可公开访问,并且只有特定的应用程序可以调用读取它(网络安全技术和东西)

但是如何下载相同的文件,我尝试了readfilefopen/fpassthrufile_get_contents,但似乎没有任何效果。 Readfile 给出错误failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden

有没有办法通过fopenreadfile 提供类似curl 的选项,我认为这可能是解决这个问题的最简单方法。我在 PHP 文档中找不到太多帮助。

请帮忙。

【问题讨论】:

  • 你是否提供了关于“你”的标题和内容?
  • @DavidBélanger 只是通常的 Content-dispositionContent-type 标头。
  • 您需要发送关于您的标头:UserAgent 和 IP 地址。

标签: php curl https download security


【解决方案1】:

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

来自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');
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多