`
CharlesCui
  • 浏览: 427362 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Apache模块-下载文件-性能测试打靶用的靶子

阅读更多

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后面的文件绝对路径。

分享到:
评论
1 楼 CharlesCui 2011-01-04  

问题一:
配置文件中:SetHandler后面的字符串,
也就是
if (strcmp(r->handler, "preview"))中的preview
这个字符串的长度有限制,太长的话模块不起作用。

问题二:
#     if (strcmp(r->handler, "preview")) { 
#         return DECLINED; 
#     }
这个要写在执行代码的最前面,否则每个请求都过来执行一下,然后运行到这步发现进错模块了。我上面写的不好。

相关推荐

    WLSPlugin12.2.1.4.0-Apache2.2-Apache2.4-Linux_x86_64-12.2.1.4.0.zip

    3. **配置Apache**:编辑Apache的配置文件(通常是`httpd.conf`),添加必要的模块加载指令,如`LoadModule weblogic_module modules/mod_weblogic.so`,并配置虚拟主机以启用Plugin。 4. **设置Plugin配置文件**:...

    Apache JMeter (apache-jmeter-5.5.zip)

    Apache JMeter (apache-jmeter-5.5.zip)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。 Apache JMeter...

    apache-ant-1.9.16-bin.zip

    使用Apache Ant,开发者可以定义一系列的任务,每个任务可以是简单的文件操作,也可以是复杂的构建流程,如编译Java代码、生成Javadoc、创建JAR文件、执行单元测试等。Ant通过XML语法来描述这些任务,使得构建过程...

    apache-maven-3.8.4-bin.zip maven下载鬼慢

    对于大型项目,Maven的模块化特性尤为有用,一个项目可以被划分为多个子模块,每个子模块都有自己的pom.xml文件,而顶层的pom.xml作为聚合模块,管理所有子模块。这种结构便于管理复杂的依赖关系和构建顺序。 在...

    apache资源 apache-hive-1.2.2-bin.tar gz文件

    apache资源 apache-hive-1.2.2-bin.tar gz文件

    apache-jakarta旗下的所有开源项目jar文件

    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配置好的阿里云仓库文件

    在这个“apache-maven-3.9.2.zip”压缩包中,您将找到完整的Maven安装文件,包括所有必要的库和配置文件,预配置了阿里云仓库,以便快速接入并下载依赖。 1. Maven简介:Maven的核心理念是“约定优于配置”,它通过...

    apache-maven-3.3.9版本.zip

    Apache Maven 是一个强大的项目管理和构建工具,主要用于Java项目。它基于项目对象模型(Project Object Model,POM)的概念,能够管理项目的构建、报告和依赖关系。Maven 的目标是简化项目构建过程,通过标准化构建...

    Apache JMeter (apache-jmeter-5.5.tgz)

    Apache JMeter (apache-jmeter-5.5.tgz)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。 Apache JMeter...

    apache-jmeter-5.0压力测试安装包

    Apache JMeter是一款强大的开源性能测试工具,主要用于模拟大量并发用户对服务器、网络或者数据库等进行压力测试,以评估系统的稳定性、响应时间和资源消耗情况。在本"apache-jmeter-5.0压力测试安装包"中,包含的是...

    apache-jmeter-5.1.1.zip

    Apache JMeter是一款强大的开源压力测试工具,主要用于对Web应用程序进行性能和负载测试。它最初设计为HTTP服务器的负载测试工具,但随着时间的发展,现在已经能够处理各种各样的协议,包括FTP、SMTP、POP3、JMS、...

    apache-jmeter-3.0.zip和apache-jmeter-3.0_src.zip

    Apache JMeter是开源软件,主要用于性能测试,尤其是Web应用程序。标题提到的两个压缩包文件分别是"apache-jmeter-3.0.zip"和"apache-jmeter-3.0_src.zip",它们代表了JMeter 3.0的不同版本。 1. **apache-jmeter-...

    apache-maven-3.9.6-bin

    使用Maven时,开发者可以声明项目依赖,Maven会自动下载这些依赖并管理它们的版本,避免版本冲突。依赖管理是通过在POM文件中指定坐标(groupId、artifactId、version)来完成的。此外,Maven还有一系列内置的生命...

    apache-ant-zip-2.3.jar.zip

    2. **本地存储**: 将下载的JAR文件保存到本地文件系统,通常是在项目的lib目录下,或者如果使用的是Maven或Gradle,可能是在`/lib`或`/dependencies`目录。 3. **配置构建脚本**: 对于Maven项目,需要在pom.xml文件...

    apache-cxf-3.1.6.zip官网完整包

    在解压"apache-cxf-3.1.6.zip"后,您会得到一个名为"apache-cxf-3.1.6"的目录,其中包含各种库文件(jar文件)、配置文件、示例代码、文档等。这些文件将帮助您了解和使用CXF框架。 通过阅读官方文档、API参考和...

    apache-maven-3.5.3-src

    通过这个文件,Maven能够自动下载项目所需的库,编译源代码,运行测试,打包应用程序,并执行部署操作。 Maven的生命周期是另一个关键概念,它定义了一系列构建阶段,如编译(compile)、测试(test)、打包...

    apache-maven-3.8.1-bin.zip

    - Maven通过读取POM.xml中的依赖信息,自动下载并管理项目所需的库文件,避免了手动管理jar文件的繁琐工作。 4. **构建生命周期**: - Maven具有清晰的构建生命周期,包括`clean`(清理)、`default`(编译、测试...

    apache-jmeter-5.3.tgz.7z

    总结,"apache-jmeter-5.3.tgz.7z"文件提供了强大的性能测试工具Apache JMeter的5.3版本,涵盖了压力测试、负载测试、分布式测试等多个方面,对于评估和优化Web应用的性能非常有用。在Linux环境下,遵循上述步骤即可...

    apache-tomcat-6.0.35和apache-tomcat-6.0.35 src

    总之,Apache Tomcat 6.0.35是一个广泛使用的Servlet容器,提供了解析和执行JSP页面的能力,且具有轻量级、高性能的特点。通过学习其源代码,开发者可以深入理解Web服务器的工作原理,并能更好地优化和调试自己的...

    apache-maven-3_6_3-bin.tar.gz下载

    本资源提供的是 Apache Maven 3.6.3 的二进制版本的压缩包,文件名为 "apache-maven-3.6.3-bin.tar.gz"。 Maven 的核心功能包括: 1. **依赖管理**:Maven 可以自动下载项目所需的库文件,并管理这些依赖关系。...

Global site tag (gtag.js) - Google Analytics