1、安装libevent
$ tar xvzf libevent-2.0.20-stable.tar.gz $ cd libevent-2.0.20-stable/ $ ./configure --prefix=/usr/local/libevent-2.0.20-stable/ $ make $ make install
2、修改LD_LIBRARY_PATH
$ export LD_LIBRARY_PATH=/usr/local/libevent-2.0.20-stable/lib:$LD_LIBRARY_PATH $ sudo ldconfig
3、简易实现
#include <stdio.h> #include <stdlib.h> #include <err.h> #include <event.h> #include <evhttp.h> /* HTTP Request Handle */ void http_handle(struct evhttp_request *req, void *arg); int main() { struct evhttp *httpd; event_init(); httpd = evhttp_start("0.0.0.0", 2345); if (httpd == NULL) { fprintf(stderr, "Error: Unable to listen on %s:%d\n\n"); exit(1); } evhttp_set_timeout(httpd, 2000); evhttp_set_gencb(httpd, http_handle, NULL); event_dispatch(); evhttp_free(httpd); return 0; } void http_handle(struct evhttp_request *req, void *arg){ struct evbuffer *buf; buf = evbuffer_new(); /* Response the client */ evhttp_send_reply(req, HTTP_OK, "OK", buf); /* Release the memory */ evbuffer_free(buf); fprintf(stderr, "收到请求\n"); }
4、编译
$ gcc http.c -L /usr/local/libevent-2.0.20-stable/lib/ -levent -I /usr/local/libevent-2.0.20-stable/include/
5、测试
(1)服务端执行编译后的文件
$ ./a.out
(2)客户端发送请求
$ curl http://127.0.0.1:2345
6、处理http请求,重写http_handle方法
void http_handle(struct evhttp_request *req, void *arg){ struct evbuffer *buf; buf = evbuffer_new(); /* Analyst the URI */ char *decode_uri = strdup((char*) evhttp_request_uri(req)); struct evkeyvalq http_query; evhttp_parse_query(decode_uri, &http_query); free(decode_uri); /* URI Parameter */ const char *http_input_opt = evhttp_find_header (&http_query, "opt"); const char *http_input_name = evhttp_find_header (&http_query, "name"); const char *http_input_data = evhttp_find_header (&http_query, "data"); /* header */ evhttp_add_header(req->output_headers, "Content-Type", "text/plain"); evhttp_add_header(req->output_headers, "Connection", "keep-alive"); evhttp_add_header(req->output_headers, "Cache-Control", "no-cache"); if(http_input_opt != NULL && http_input_name != NULL && strlen(http_input_name) < 100){ if(strcmp(http_input_opt, "GET") == 0){ int buffer_data_len = EVBUFFER_LENGTH(req->input_buffer); if(buffer_data_len > 0){ /* POST METHOD */ char *input_value_data = EVBUFFER_DATA(req->input_buffer); fprintf(stderr,"%s \n",input_value_data); }else if(http_input_data != NULL){ fprintf(stderr,"opt:%s \n",http_input_opt); fprintf(stderr,"name:%s \n",http_input_name); fprintf(stderr,"data:%s \n",http_input_data); } } } /* Response */ evhttp_send_reply(req, HTTP_OK, "OK", buf); /* Release the memory */ evhttp_clear_headers(&http_query); evbuffer_free(buf); }
7、客户端发送请求
$ curl http://127.0.0.1:2345/?opt=GET&name=getUser&data=1
相关推荐
在这个"spring+mina实现http接口服务端通信客户端"的项目中,我们将深入探讨如何整合这两个强大的工具来创建一个能够通过HTTP接口接收客户端消息的服务端。 首先,Spring MVC 作为Spring框架的一部分,负责处理HTTP...
在本示例中,我们将关注的是"C# HTTP接口设计及调用demo",这通常涉及到如何创建一个HTTP服务端接口,以及如何使用C#客户端进行调用。HTTP接口在分布式系统中扮演着重要角色,它允许不同组件之间通过HTTP协议交换...
所以,对于即将开始的http接口测试需求,立马花了两天时间搭建了一个http接口自动化测试框架用于测试后期回归测试,实在是被大量的重复手工执行搞怕了。最方便的方法就是用python直接写代码,代码和测试数据分离,...
在Java编程语言中,HTTPURLConnection是Java标准库提供的一个接口,用于通过HTTP协议与服务器进行通信。这个接口在java.net包下,是处理HTTP请求的基础类,包括发送GET、POST等请求,以及文件上传功能。在本文中,...
本篇文章将详细解析如何利用Python和Flask实现HTTP接口。 首先,为什么要实现HTTP接口呢?在软件开发过程中,我们常常需要与第三方服务进行交互,比如获取数据、发送请求等。这时,如果我们能够自定义HTTP接口,就...
在进行Python实现HTTP接口自动化测试时,我们通常会利用各种工具和编程库。本文主要讨论如何使用Python的requests库和unittest框架,结合数据处理技术,实现高效且灵活的接口测试。 1. **接口方法实现与封装** ...
Webservice接口是泛微OA提供的一种基于HTTP协议的通信方式,用于外部系统与OA系统的交互。开发者需要了解如何创建、调用这些接口,通常涉及XML或SOAP格式的数据交换。在实践中,可能需要处理的身份验证、请求参数...
本篇文章将深入探讨如何利用SpringBoot、Quartz和MyBatis框架,以及Dubbo和HTTP接口,实现一个动态配置的集群解决方案,旨在提高系统的灵活性和可维护性。 首先,SpringBoot是基于Spring框架的轻量级启动器,它简化...
HTTP接口和WebService接口是两种常见的服务交互方式,它们在IT领域中扮演着至关重要的角色,尤其是在分布式系统和网络通信中。 HTTP接口,全称为HyperText Transfer Protocol接口,是基于TCP/IP协议的应用层协议,...
本文将深入探讨如何使用Java和Spring Boot来实现接口签名。 首先,接口签名的基本原理是通过一种约定好的方式,如哈希算法,将请求的特定信息(如URL、参数、时间戳等)和一个私有密钥结合,生成一个唯一的签名字符...
Go语言提供了http包,可以很轻松的开发http接口。以下为示例代码: 代码如下:package webserver import ( “encoding/json” “fmt” “net/http” “time” ) func WebServerBase() {...
- `HttpServlet`或`Controller`:实现HTTP接口,处理来自客户端的请求,调用SmsSender发送短信。 - `Config`:存储配置信息,如MC的IP地址、端口号、用户名、密码等。 - `Utils`:辅助工具类,如字符串处理、日期...
在本文中,我们将深入探讨如何使用C#编程语言来实现QQ接口软件,并研究QQ的HTTP接口协议。QQ作为中国最受欢迎的即时通讯工具之一,其API和接口的利用为开发者提供了丰富的功能扩展可能性。以下是该主题的主要知识点...
JAVA 调用HTTP接口POST或GET实现方式,java通用
http对外接口安全认证,利用spring aop方式,对特定的controller的方法进行拦截,类似微信SDK的安全认证功能,实现http请求认证。认证后产生令牌,30分钟有效期内可使用令牌无需认证。详细内容请关注微信公众号...
在IT行业中,C#语言广泛应用于开发Web应用程序,其中ASHX(Generic Handler)是一种轻量级的HTTP处理程序,常用于实现简单的Web服务接口。本文将深入探讨如何使用C#来实现ASHX接口,并结合提供的文件目录结构进行...
LINUX C 下HTTP处理函数的POST以及GET的处理接口实现方法