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

实现http接口

    博客分类:
  • C
阅读更多

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接口服务端通信客户端

    在这个"spring+mina实现http接口服务端通信客户端"的项目中,我们将深入探讨如何整合这两个强大的工具来创建一个能够通过HTTP接口接收客户端消息的服务端。 首先,Spring MVC 作为Spring框架的一部分,负责处理HTTP...

    c# http接口设计及调用demo

    在本示例中,我们将关注的是"C# HTTP接口设计及调用demo",这通常涉及到如何创建一个HTTP服务端接口,以及如何使用C#客户端进行调用。HTTP接口在分布式系统中扮演着重要角色,它允许不同组件之间通过HTTP协议交换...

    robotframework+python实现http接口自动化测试框架

    所以,对于即将开始的http接口测试需求,立马花了两天时间搭建了一个http接口自动化测试框架用于测试后期回归测试,实在是被大量的重复手工执行搞怕了。最方便的方法就是用python直接写代码,代码和测试数据分离,...

    Java自带的HttpURLConnection访问接口实现文件上传

    在Java编程语言中,HTTPURLConnection是Java标准库提供的一个接口,用于通过HTTP协议与服务器进行通信。这个接口在java.net包下,是处理HTTP请求的基础类,包括发送GET、POST等请求,以及文件上传功能。在本文中,...

    基于python和flask实现http接口过程解析

    本篇文章将详细解析如何利用Python和Flask实现HTTP接口。 首先,为什么要实现HTTP接口呢?在软件开发过程中,我们常常需要与第三方服务进行交互,比如获取数据、发送请求等。这时,如果我们能够自定义HTTP接口,就...

    Python实现http接口自动化测试

    在进行Python实现HTTP接口自动化测试时,我们通常会利用各种工具和编程库。本文主要讨论如何使用Python的requests库和unittest框架,结合数据处理技术,实现高效且灵活的接口测试。 1. **接口方法实现与封装** ...

    泛微oa接口开发经验

    Webservice接口是泛微OA提供的一种基于HTTP协议的通信方式,用于外部系统与OA系统的交互。开发者需要了解如何创建、调用这些接口,通常涉及XML或SOAP格式的数据交换。在实践中,可能需要处理的身份验证、请求参数...

    springboot+quartz集群:通过动态配置调度dubbo接口/http接口代码实现

    本篇文章将深入探讨如何利用SpringBoot、Quartz和MyBatis框架,以及Dubbo和HTTP接口,实现一个动态配置的集群解决方案,旨在提高系统的灵活性和可维护性。 首先,SpringBoot是基于Spring框架的轻量级启动器,它简化...

    HTTP接口和WebService接口

    HTTP接口和WebService接口是两种常见的服务交互方式,它们在IT领域中扮演着至关重要的角色,尤其是在分布式系统和网络通信中。 HTTP接口,全称为HyperText Transfer Protocol接口,是基于TCP/IP协议的应用层协议,...

    springboot实现接口签名

    本文将深入探讨如何使用Java和Spring Boot来实现接口签名。 首先,接口签名的基本原理是通过一种约定好的方式,如哈希算法,将请求的特定信息(如URL、参数、时间戳等)和一个私有密钥结合,生成一个唯一的签名字符...

    Go语言服务器开发实现最简单HTTP的GET与POST接口

    Go语言提供了http包,可以很轻松的开发http接口。以下为示例代码: 代码如下:package webserver    import (   “encoding/json”   “fmt”   “net/http”   “time”  )    func WebServerBase() {...

    java实现cmpp协议开发代码

    - `HttpServlet`或`Controller`:实现HTTP接口,处理来自客户端的请求,调用SmsSender发送短信。 - `Config`:存储配置信息,如MC的IP地址、端口号、用户名、密码等。 - `Utils`:辅助工具类,如字符串处理、日期...

    C#实现QQ接口软件以及QQ的HTTP接口协议探究

    在本文中,我们将深入探讨如何使用C#编程语言来实现QQ接口软件,并研究QQ的HTTP接口协议。QQ作为中国最受欢迎的即时通讯工具之一,其API和接口的利用为开发者提供了丰富的功能扩展可能性。以下是该主题的主要知识点...

    JAVA 调用HTTP接口POST或GET实现方式

    JAVA 调用HTTP接口POST或GET实现方式,java通用

    http接口认证实现

    http对外接口安全认证,利用spring aop方式,对特定的controller的方法进行拦截,类似微信SDK的安全认证功能,实现http请求认证。认证后产生令牌,30分钟有效期内可使用令牌无需认证。详细内容请关注微信公众号...

    C# ashx接口实现 实例

    在IT行业中,C#语言广泛应用于开发Web应用程序,其中ASHX(Generic Handler)是一种轻量级的HTTP处理程序,常用于实现简单的Web服务接口。本文将深入探讨如何使用C#来实现ASHX接口,并结合提供的文件目录结构进行...

    Linux c httpPOST与GET接口实现方法

    LINUX C 下HTTP处理函数的POST以及GET的处理接口实现方法

Global site tag (gtag.js) - Google Analytics