java 解析http请求为Bean 封装类

有两种解析方式,可以解析Sting的请求,或者直接解析请求流,会自动解析流中的请求。 需要注意 流请求只会读取2048字节的数据 是为了防止堵塞的情况 如果请求比较大的话可以自己更改

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;

import java.io.IOException;
import java.io.InputStream;

public class HttpRequestParser {
    private static Gson gson = new Gson();

    static HttpRequest parser(InputStream inputStream) {
        byte[] buffer = new byte[2048];
        try {
            int len = inputStream.read(buffer);
            String request = new String(buffer, 0, len);
            return parser(request);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    static HttpRequest parser(String request) {
        System.out.println(request);

        String[] requestSplit = request.split("\r\n\r\n");
        String header = requestSplit[0];


        String[] headerSplit = header.split("\r\n");

        String headerBody = header.substring(headerSplit[0].length());

        if (headerBody.startsWith("\r\n"))headerBody = headerBody.substring(2);
        if (headerBody.endsWith("\r\n")) headerBody = headerBody.substring(0, headerBody.length()-2);

        String[] headerBodySplit = headerBody.split("\r\n");
        headerBody = "{";
        for (String headerOption : headerBodySplit) {
            String[] headerOptionSplit = headerOption.split(":");
            String key = "\""+headerOptionSplit[0]+"\"";
            headerBody+= key+":\""+headerOptionSplit[1]+"\",";
        }
        headerBody = headerBody.substring(0, headerBody.length()-1);
        headerBody+="}";

        HttpRequest httpRequest = gson.fromJson(headerBody, HttpRequest.class);
        String headerHeaderSplit = headerSplit[0];
        httpRequest.setRequestMethod(headerHeaderSplit.split(" ")[0]);
        httpRequest.setRequestPath(headerHeaderSplit.split(" ")[1]);

        if (requestSplit.length>1){
            String body = requestSplit[1];
            httpRequest.setRequestBody(body);
        }
        return httpRequest;
    }

    class HttpRequest {
        @SerializedName("Host")
        private String _$Host209; // FIXME check this code
        private String Connection;
        private String Pragma;
        @SerializedName("Cache-Control")
        private String CacheControl;
        @SerializedName("User-Agent")
        private String UserAgent;
        private String Accept;
        @SerializedName("Sec-Fetch-Site")
        private String SecFetchSite;
        @SerializedName("Sec-Fetch-Mode")
        private String SecFetchMode;
        private String Referer;
        @SerializedName("Accept-Encoding")
        private String AcceptEncoding;
        @SerializedName("Accept-Language")
        private String AcceptLanguage;

        private String RequestPath;
        private String RequestMethod;
        private String RequestBody;

        public String getRequestBody() {
            return RequestBody;
        }

        public void setRequestBody(String requestBody) {
            RequestBody = requestBody;
        }

        public String getRequestPath() {
            return RequestPath;
        }

        public void setRequestPath(String requestPath) {
            this.RequestPath = requestPath;
        }

        public String getRequestMethod() {
            return RequestMethod;
        }

        public void setRequestMethod(String requestMethod) {
            RequestMethod = requestMethod;
        }

        public String get_$Host209() {
            return _$Host209;
        }

        public void set_$Host209(String _$Host209) {
            this._$Host209 = _$Host209;
        }

        public String getConnection() {
            return Connection;
        }

        public void setConnection(String Connection) {
            this.Connection = Connection;
        }

        public String getPragma() {
            return Pragma;
        }

        public void setPragma(String Pragma) {
            this.Pragma = Pragma;
        }

        public String getCacheControl() {
            return CacheControl;
        }

        public void setCacheControl(String CacheControl) {
            this.CacheControl = CacheControl;
        }

        public String getUserAgent() {
            return UserAgent;
        }

        public void setUserAgent(String UserAgent) {
            this.UserAgent = UserAgent;
        }

        public String getAccept() {
            return Accept;
        }

        public void setAccept(String Accept) {
            this.Accept = Accept;
        }

        public String getSecFetchSite() {
            return SecFetchSite;
        }

        public void setSecFetchSite(String SecFetchSite) {
            this.SecFetchSite = SecFetchSite;
        }

        public String getSecFetchMode() {
            return SecFetchMode;
        }

        public void setSecFetchMode(String SecFetchMode) {
            this.SecFetchMode = SecFetchMode;
        }

        public String getReferer() {
            return Referer;
        }

        public void setReferer(String Referer) {
            this.Referer = Referer;
        }

        public String getAcceptEncoding() {
            return AcceptEncoding;
        }

        public void setAcceptEncoding(String AcceptEncoding) {
            this.AcceptEncoding = AcceptEncoding;
        }

        public String getAcceptLanguage() {
            return AcceptLanguage;
        }

        public void setAcceptLanguage(String AcceptLanguage) {
            this.AcceptLanguage = AcceptLanguage;
        }
    }
}

你可能感兴趣的:(Java,java,http,gson)