⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mockrequestparser.java

📁 UrlRewriteFilter 是一个不错的URL转换工具
💻 JAVA
字号:
package org.tuckey.web.filters.urlrewrite.test;

import org.tuckey.web.filters.urlrewrite.utils.Log;
import org.tuckey.web.filters.urlrewrite.utils.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * todo: IN PROGRESS
 *
 * Class to decode a request from one of three inputs.  Literally:
 * 
 * /blah.jsp
 *
 * or
 *
 * GET /blah.jsp HTTP/1.1
 *
 * or
 *
 * GET /blah.jsp HTTP/1.1
 * user-agent: Mozilla 1.2.3
 * cookie: a:aaa
 *
 */
public class MockRequestParser {

    private static Log log = Log.getLog(MockRequestParser.class);

    public MockRequest decodeRequest(String requestString) {
        return decodeRequest(requestString.split("\n"));
    }

    Pattern FIRST_LINE_PATTERN = Pattern.compile("^([A-Z]+) (.*) ([A-Z0-9/\\.]+)$");

    public MockRequest decodeRequest(String[] requestLines) {
        MockRequest request = new MockRequest();
        request.setRemoteAddr("127.0.0.1");
        request.setRemoteHost("localhost");

        String line1 = requestLines[0];
        Matcher line1Matcher = FIRST_LINE_PATTERN.matcher(line1);

        String requestPart;
        if (line1Matcher.matches()) {
            request.setMethod(line1Matcher.group(1));
            requestPart = line1Matcher.group(2);
            request.setScheme(line1Matcher.group(3));
        } else {
            requestPart = line1;
        }

        String requestUri = requestPart;
        int questionMarkIdx = requestPart.indexOf('?');
        if (questionMarkIdx != -1) {
            String queryString = requestPart.substring(questionMarkIdx + 1);
            setParams(request, queryString);
            requestUri = requestPart.substring(0, questionMarkIdx);
        }
        int semiColonIdx = requestUri.indexOf(';');
        if (semiColonIdx != -1) {
            String sessionId = requestUri.substring(semiColonIdx + 1);
            int equalsIdx = sessionId.indexOf('=');
            if ( equalsIdx != -1 ) {
                sessionId = sessionId.substring(equalsIdx+1);
            }
            request.setRequestedSessionId(sessionId);
            requestUri = requestUri.substring(0, semiColonIdx);
        }
        request.setRequestURI(requestUri);

        if (requestLines.length > 1) {
            boolean parsingBody = false;
            for (int i = 0; i < requestLines.length; i++) {
                if (i == 0) continue;
                String line = requestLines[i];
                if (!parsingBody) {
                    if (line.length() == 0) {
                        parsingBody = true;
                        continue;
                    }
                    int colonIdx = line.indexOf(':');
                    if (colonIdx < 1) {
                        log.debug("cannot parse line " + line);
                        continue;
                    }
                    String headerName = StringUtils.trimToNull(line.substring(0, colonIdx));
                    String headerValue = StringUtils.trimToNull(line.substring(colonIdx + 1));
                    if (headerName == null) {
                        log.debug("cannot parse line " + line);
                        continue;
                    }
                    request.setHeader(headerName, headerValue);
                    if ("host".equals(headerName.toLowerCase())) {
                        request.setServerName(headerValue);
                    }
                } else {
                    setParams(request, line);
                }
            }
        }
        return request;
    }

    private void setParams(MockRequest request, String queryString) {
        request.setQueryString(queryString);
        if (queryString.indexOf('&') != -1) {
            String[] paramSets = queryString.split("&");
            for (int i = 0; i < paramSets.length; i++) {
                addParamSet(request, paramSets[i]);
            }
        } else {
            addParamSet(request, queryString);
        }
    }

    private void addParamSet(MockRequest request, String paramSet) {
        if (paramSet.indexOf("=") != -1) {
            String[] nameVal = paramSet.split("=", 2);
            request.addParameter(nameVal[0], nameVal[1]);
        } else {
            log.info("cannot find value of request parameter " + paramSet);
        }
    }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -