我使用HTTP::Proxy来检查客户端 - 服务器应用程序的行为。我已经制作了一个过滤器来向客户端传递任意内容。HTTP :: Proxy,检查服务器端传输是否成功
我要测试的应用程序是cvmfs。这是一个使用标准http连接来安装远程文件系统的软件。我们需要检查当服务器发送大于cvmfs缓存分区的文件时会发生什么情况。我们希望检查cvmfs是否需要在丢弃它之前下载整个文件,或者一旦明确文件错误就立即停止。
客户端需要一个10MB的文件,而服务器会发送一个100MB的文件。当然,客户端将识别伪造文件并且不会安装存储库。我想检查客户端是否停止在10mb后加载,或者在关闭连接之前加载整个文件,我必须在服务器端检查它。因此,一旦服务器开始发送文件(这项工作将由HTTP :: Proxy完成,它将拦截该呼叫并将提供假文件),我想知道客户端何时停止下载它。
有没有办法做到这一点?只要知道转移是否成功就足够了,尽管直接检查转移了多少MB可能是有用的。
编辑
这是我使用的日志传送的数据过滤器(我用两个代理方式的建议),它不会是我想要的东西。不幸的是,它只适用于纯文本文件。我怎样才能完成相同的可执行文件(我正在导出可执行文件)?
package Filters::RecordTransfer;
######################################
# This filter is intended to be used for response
######################################
use strict;
use warnings;
use HTTP::Proxy::BodyFilter::simple;
our $body = HTTP::Proxy::BodyFilter::simple->new (
sub {
my ($self, $dataref, $message, $protocol, $buffer) = @_;
my $record_file = '/tmp/transferred_data';
if (-e $record_file) {
my $fh;
open($fh, '<', $record_file);
my $actual_size = $fh->getline;
close($fh);
my $new_size = $actual_size + (length($$dataref));
open($fh, '>', $record_file);
print $fh $new_size;
close($fh);
}
else {
open (my $fh, '>', $record_file);
print $fh length($$dataref);
close($fh);
}
}
);
1;
我很困惑。谁在发送谁的东西?请尽量将其描述得更简洁一点。 – simbabque 2012-07-09 11:27:37
我不认为它可能有用,因为我的问题不依赖于此...但是,我添加了一些解释(但现在的问题有点多余)。 – Zagorax 2012-07-09 12:01:09
至少现在我们明白你的意思是'仓库'。那不清楚。谢谢。无论如何...总结通过过滤器的所有消息的“lenght()”怎么样?或者是这样简单?我现在无法测试。 – simbabque 2012-07-09 12:09:16