apache模块,
下载某一个文件,
性能测试打靶用,
当靶子。
/*
** mod_preview.c -- Apache sample preview module
** [Autogenerated via ``apxs -n preview -g'']
**
** To play with this sample module first compile it into a
** DSO file and install it into Apache's modules directory
** by running:
**
** $ apxs -c -i mod_preview.c
**
** Then activate it in Apache's httpd.conf file for instance
** for the URL /preview in as follows:
**
** # httpd.conf
** LoadModule preview_module modules/mod_preview.so
** <Location /preview>
** SetHandler preview
** </Location>
**
** Then after restarting Apache via
**
** $ apachectl restart
**
** you immediately can request the URL /preview and watch for the
** output of this module. This can be achieved for instance via:
**
** $ lynx -mime_header http://localhost/preview
**
** The output should be similar to the following one:
**
** HTTP/1.1 200 OK
** Date: Tue, 31 Mar 1998 14:42:22 GMT
** Server: Apache/1.3.4 (Unix)
** Connection: close
** Content-Type: text/html
**
** The page from mod_preview.c
*/
#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h"
#include "ap_config.h"
#include "ap_regex.h"
#include "http_log.h"
/* The content handler */
static int preview_handler(request_rec *r)
{
char *fn;// = "/usr/local/httpd-2.3.8/include/httpd.h";
apr_file_t *f = NULL;
apr_status_t rv;
apr_size_t sz;
ap_regex_t *preg;
const char *regex = "filename=([^\\&]*)(.*)";
int regRet = AP_REG_NOMATCH;
int nmatch = AP_MAX_REG_MATCH;
ap_regmatch_t pmatch[nmatch];
if(strlen(r->args) == 0){
ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, NULL,r->server,"No args.");
return HTTP_INTERNAL_SERVER_ERROR;
}else{
if(ap_regcomp(preg,regex,0) == 0){
regRet = ap_regexec(preg,r->args,nmatch,pmatch,AP_REG_EXTENDED|AP_REG_ICASE);
ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, NULL,r->server,"Compile a regular expression. %s",regex);
}
else{
ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, NULL,r->server," Compile regular expression fail.");
ap_rputs("ap_regexec error.",r);
return DONE;
}
if(regRet == 0){
fn = (char *)calloc(pmatch[1].rm_eo - pmatch[1].rm_so + 1,sizeof(char));
memcpy(fn,r->args+pmatch[1].rm_so,pmatch[1].rm_eo - pmatch[1].rm_so);
rv = apr_file_open(&f,fn,APR_READ|APR_SENDFILE_ENABLED,APR_OS_DEFAULT,r->pool);
ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, NULL,r->server,"Get matched parameter : %s",fn);
ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, NULL,r->server,"File open status : %d",rv);
}else{
ap_rprintf(r,"Reguler Expression is not matched %s.\n",r->args);
ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, NULL,r->server,"Reguler Expression is not matched.");
return DONE;
}
}
if (strcmp(r->handler, "preview")) {
return DECLINED;
}
r->content_type = "text/html";
if (!r->header_only){
if(rv == APR_SUCCESS){
apr_finfo_t info;
apr_stat(&info,fn,APR_FINFO_SIZE,r->pool);
apr_size_t size = (apr_size_t)info.size;
if (APR_SUCCESS != ap_send_fd(f, r, 0, size, &sz)) {
return HTTP_INTERNAL_SERVER_ERROR;
}
apr_off_t fpos = sz;
while (1) {
/* flush output first */
ap_flush_conn(r->connection);
if (fpos < size) {
/* file grew by finfo.size - fpos */
if (APR_SUCCESS != ap_send_fd(f, r, fpos, size - fpos, &sz)) {
return HTTP_INTERNAL_SERVER_ERROR;
}
fpos += sz;
} else {
break;
}
}
apr_file_close(f);
return OK;
}else{
ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, NULL,r->server,"Open %s error!\n args : %s\n", fn,r->args);
return DONE;
}
}
return OK;
}
static void preview_register_hooks(apr_pool_t *p)
{
ap_hook_handler(preview_handler, NULL, NULL, APR_HOOK_MIDDLE);
}
/* Dispatch list for API hooks */
module AP_MODULE_DECLARE_DATA preview_module = {
STANDARD20_MODULE_STUFF,
NULL, /* create per-dir config structures */
NULL, /* merge per-dir config structures */
NULL, /* create per-server config structures */
NULL, /* merge per-server config structures */
NULL, /* table of config file commands */
preview_register_hooks /* register hooks */
};
编译:
apxs -c mod_preview.c
安装:
apxs -ia mod_preview.la
配置:
vim httpd.conf
添加:
<Location /preview>
SetHandler preview
</Location>
注意apache进程的用户权限和被访问文件的权限
URL参数:
const char *regex = "filename=([^\\&]*)(.*)";
正则扣取filename后面的文件绝对路径。
分享到:
相关推荐
3. **配置Apache**:编辑Apache的配置文件(通常是`httpd.conf`),添加必要的模块加载指令,如`LoadModule weblogic_module modules/mod_weblogic.so`,并配置虚拟主机以启用Plugin。 4. **设置Plugin配置文件**:...
Apache JMeter (apache-jmeter-5.5.zip)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。 Apache JMeter...
使用Apache Ant,开发者可以定义一系列的任务,每个任务可以是简单的文件操作,也可以是复杂的构建流程,如编译Java代码、生成Javadoc、创建JAR文件、执行单元测试等。Ant通过XML语法来描述这些任务,使得构建过程...
对于大型项目,Maven的模块化特性尤为有用,一个项目可以被划分为多个子模块,每个子模块都有自己的pom.xml文件,而顶层的pom.xml作为聚合模块,管理所有子模块。这种结构便于管理复杂的依赖关系和构建顺序。 在...
apache资源 apache-hive-1.2.2-bin.tar gz文件
apache-jakarta旗下的所有开源项目jar文件 apache-jakarta-commons-codec.jar apache-jakarta-commons-collections.jar apache-jakarta-commons-discovery.jar apache-jakarta-commons-email.jar apache-jakarta-...
在这个“apache-maven-3.9.2.zip”压缩包中,您将找到完整的Maven安装文件,包括所有必要的库和配置文件,预配置了阿里云仓库,以便快速接入并下载依赖。 1. Maven简介:Maven的核心理念是“约定优于配置”,它通过...
Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM)的概念,能够管理项目的构建、报告和依赖关系。Maven 的目标是简化项目构建过程,通过标准化构建...
Apache JMeter (apache-jmeter-5.5.tgz)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。 Apache JMeter...
Apache JMeter是一款强大的开源性能测试工具,主要用于模拟大量并发用户对服务器、网络或者数据库等进行压力测试,以评估系统的稳定性、响应时间和资源消耗情况。在本"apache-jmeter-5.0压力测试安装包"中,包含的是...
Apache JMeter是一款强大的开源压力测试工具,主要用于对Web应用程序进行性能和负载测试。它最初设计为HTTP服务器的负载测试工具,但随着时间的发展,现在已经能够处理各种各样的协议,包括FTP、SMTP、POP3、JMS、...
Apache JMeter是开源软件,主要用于性能测试,尤其是Web应用程序。标题提到的两个压缩包文件分别是"apache-jmeter-3.0.zip"和"apache-jmeter-3.0_src.zip",它们代表了JMeter 3.0的不同版本。 1. **apache-jmeter-...
使用Maven时,开发者可以声明项目依赖,Maven会自动下载这些依赖并管理它们的版本,避免版本冲突。依赖管理是通过在POM文件中指定坐标(groupId、artifactId、version)来完成的。此外,Maven还有一系列内置的生命...
2. **本地存储**: 将下载的JAR文件保存到本地文件系统,通常是在项目的lib目录下,或者如果使用的是Maven或Gradle,可能是在`/lib`或`/dependencies`目录。 3. **配置构建脚本**: 对于Maven项目,需要在pom.xml文件...
在解压"apache-cxf-3.1.6.zip"后,您会得到一个名为"apache-cxf-3.1.6"的目录,其中包含各种库文件(jar文件)、配置文件、示例代码、文档等。这些文件将帮助您了解和使用CXF框架。 通过阅读官方文档、API参考和...
通过这个文件,Maven能够自动下载项目所需的库,编译源代码,运行测试,打包应用程序,并执行部署操作。 Maven的生命周期是另一个关键概念,它定义了一系列构建阶段,如编译(compile)、测试(test)、打包...
- Maven通过读取POM.xml中的依赖信息,自动下载并管理项目所需的库文件,避免了手动管理jar文件的繁琐工作。 4. **构建生命周期**: - Maven具有清晰的构建生命周期,包括`clean`(清理)、`default`(编译、测试...
总结,"apache-jmeter-5.3.tgz.7z"文件提供了强大的性能测试工具Apache JMeter的5.3版本,涵盖了压力测试、负载测试、分布式测试等多个方面,对于评估和优化Web应用的性能非常有用。在Linux环境下,遵循上述步骤即可...
总之,Apache Tomcat 6.0.35是一个广泛使用的Servlet容器,提供了解析和执行JSP页面的能力,且具有轻量级、高性能的特点。通过学习其源代码,开发者可以深入理解Web服务器的工作原理,并能更好地优化和调试自己的...
本资源提供的是 Apache Maven 3.6.3 的二进制版本的压缩包,文件名为 "apache-maven-3.6.3-bin.tar.gz"。 Maven 的核心功能包括: 1. **依赖管理**:Maven 可以自动下载项目所需的库文件,并管理这些依赖关系。...