使用httpserver实现http外放绑定域名接口

JDK1.6提供了简易的Http Server API,我们可以构建自己的嵌入式Http Server,它支持Http和Https协议,提供了HTTP1.1的部分实现,没有被实现的那部分可以通过拓展已有的Http Server API来实现。程序员必须自己实现HttpHandler接口,HttpServer会调用HttpHandler实现类的回调方法来处理客户端的请求。

 

http请求demo示例:

 

import com.sun.net.httpserver.Headers;

import com.sun.net.httpserver.HttpExchange;

import com.sun.net.httpserver.HttpHandler;

import com.sun.net.httpserver.HttpServer;

import java.io.IOException;

import java.io.OutputStream;

import java.net.InetSocketAddress;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

import java.util.concurrent.Executors;

//jdk自带轻量级http server例子 http://127.0.0.1:8080/server

public class HttpServerDemo {

public static void main(String[] args) throws IOException {

InetSocketAddress addr = new InetSocketAddress(8080);

HttpServer server = HttpServer.create(addr, 0);

server.createContext("/server", new MyHandler());

server.setExecutor(Executors.newCachedThreadPool());

server.start();

System.out.println("Server is listening on port 8080");

}

}

class MyHandler implements HttpHandler {

public void handle(HttpExchange exchange) throws IOException {

String requestMethod = exchange.getRequestMethod();

if (requestMethod.equalsIgnoreCase("GET")) {

Headers responseHeaders = exchange.getResponseHeaders();

responseHeaders.set("Content-Type", "text/plain");

// responseHeaders.set("Content-Type", "text/html; charset=utf-8");

exchange.sendResponseHeaders(200, 0);

OutputStream responseBody = exchange.getResponseBody();

Headers requestHeaders = exchange.getRequestHeaders();

Set<String> keySet = requestHeaders.keySet();

Iterator<String> iter = keySet.iterator();

while (iter.hasNext()) {

String key = iter.next();

List values = requestHeaders.get(key);

String s = key + " = " + values.toString() + "\n";

responseBody.write(s.getBytes());

}

responseBody.write("jdk自带轻量级http server例子".getBytes());

responseBody.close();

}

}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于libhv的HttpServer实现POST的挂机接口的示例代码: ```c++ #include "hv.h" void on_http_request(hv::HttpRequest* req, hv::HttpResponse* resp) { if (req->method() == hv::REQUEST_POST) { // 处理POST请求 if (req->path() == "/hangup") { // 处理挂机请求 int callid = atoi(req->get_param("callid").c_str()); // 处理callid,执行挂机操作 // ... resp->set_status_code(hv::HTTP_STATUS_OK); resp->set_header("Content-Type", "text/plain"); resp->set_body("Hangup success"); } else { resp->set_status_code(hv::HTTP_STATUS_NOT_FOUND); resp->set_header("Content-Type", "text/plain"); resp->set_body("Not Found"); } } else { resp->set_status_code(hv::HTTP_STATUS_METHOD_NOT_ALLOWED); resp->set_header("Content-Type", "text/plain"); resp->set_body("Method Not Allowed"); } } int main() { hv::HttpServer server; server.on_request(on_http_request); server.listen("0.0.0.0", 8080); server.start(); return 0; } ``` 在这个示例代码中,我们定义了一个HTTP请求处理函数on_http_request。当收到一个POST请求时,会检查请求的路径是否为/hangup,如果是,则表示收到了挂机请求,解析请求参数中的callid,并执行挂机操作;如果请求的路径不是/hangup,则返回HTTP 404错误;如果请求的方法不是POST,则返回HTTP 405错误。 要编译这个示例代码,需要链接libhv库,可以使用如下命令编译: ```sh g++ -o httpserver httpserver.cpp -lhv ``` 这个示例代码只是一个简单的示例,实际应用中可能需要更多的错误处理、日志记录、身份验证等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值