Php 文件\u获取\u内容在下载二进制文件时附加数据
我编写了一个函数,允许我在PHP中发送HTTP GET请求:Php 文件\u获取\u内容在下载二进制文件时附加数据,php,Php,我编写了一个函数,允许我在PHP中发送HTTP GET请求: function get_HTTPS_page_with_version($url, $hostname, $use_HTTP_1_0 = false, &$headers = NULL, $follow_redirect = true, $use_SSL = true) { $context = Array( "http" => Array( "method" => "GET",
function get_HTTPS_page_with_version($url, $hostname, $use_HTTP_1_0 = false, &$headers = NULL, $follow_redirect = true, $use_SSL = true) {
$context = Array(
"http" => Array(
"method" => "GET",
"ignore_errors" => true,
"follow_location" => $follow_redirect,
"user_agent" => "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
"header" => "Accept-language: en")
);
if ($use_SSL) {
$context["ssl"] = Array(
"peer_name" => $hostname,
"SNI_server_name" => $hostname,
"verify_peer_name" => false,
"verify_peer" => false);
}
if (!$use_HTTP_1_0) {
$context["http"]["protocol_version"] = "1.1";
$context["http"]["header"] .= "\r\nHost: $hostname".
"\r\nConnection: close";
}
$page = file_get_contents($url, false, stream_context_create($context));
$responseCode = get_HTTP_response_code($http_response_header);
$headers = $http_response_header;
return Array($responseCode, $page);
}
问题是,当我使用此函数获取特定文件(即)时,它会在开头添加一些字符:
6639 6361 0a0d --> f9 ca \n\r
在文件末尾:
0a0d 0d30 0d0a 000a --> \n\r \r0 \r\n NUL\n
我比较了使用Wget和此函数手动获取的文件,以及使用Wireshark在网络级别获取的文件,我可以确认服务器发送的文件在这两种情况下是相同的
我也没有这个问题
有人知道是什么导致了这种行为吗
编辑
Verisign CRL已更改,其他字节由文件内容添加,而不是我上面列出的内容,但结果仍然相同-->此函数下载的文件与使用wget手动下载的文件不同
编辑2
- 设置
$use\u HTTP\u 1\u 0=true时没有问题
- 当我添加header
(除了我得到一个gz文件,而且我更愿意避免 这个:))Accept Encoding:gzip时没有问题, deflate
- 当我仅从
关闭
更改
连接时,仍然存在问题 保持活动状态的步骤
openssl crl-INFORT DER-text-in sb.crl
Edit:显然,crl是DER格式的,有二进制数据,所以不是纯文本文件。@cen谢谢。我知道Connection
header不是HTTP/1.0的一部分,但我用HTTP/1.1尝试了一下,看看这是不是重点:)实际上,CRL采用的是DER格式,这是一种二进制格式<代码>openssl crl命令无法与我的函数一起工作,因为我得到的结果不是有效的DER文件。最后,我认为服务器不会根据客户端的签名发送不同的文件,因为我看不到Wireshark捕获中添加的字节。