|
JMeter example source code file (ConversionUtils.java)
The JMeter ConversionUtils.java source code/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.apache.jmeter.protocol.http.util; import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.jorphan.util.JOrphanUtils; // @see TestHTTPUtils for unit tests /** * General purpose conversion utilities related to HTTP/HTML */ public class ConversionUtils { private static final String CHARSET_EQ = "charset="; // $NON-NLS-1$ private static final int CHARSET_EQ_LEN = CHARSET_EQ.length(); private static final String SLASHDOTDOT = "/.."; private static final String DOTDOT = ".."; private static final String SLASH = "/"; private static final String COLONSLASHSLASH = "://"; /** * Extract the encoding (charset) from the Content-Type, * e.g. "text/html; charset=utf-8". * * @param contentType * @return the charset encoding - or null, if none was found or the charset is not supported */ public static String getEncodingFromContentType(String contentType){ String charSet = null; if (contentType != null) { int charSetStartPos = contentType.toLowerCase(java.util.Locale.ENGLISH).indexOf(CHARSET_EQ); if (charSetStartPos >= 0) { charSet = contentType.substring(charSetStartPos + CHARSET_EQ_LEN); if (charSet != null) { // Remove quotes from charset name charSet = JOrphanUtils.replaceAllChars(charSet, '"', ""); charSet = charSet.trim(); if (charSet.length() > 0) { // See Bug 44784 int semi = charSet.indexOf(";"); if (semi == 0){ return null; } if (semi != -1) { charSet = charSet.substring(0,semi); } if (!Charset.isSupported(charSet)){ return null; } return charSet; } return null; } } } return charSet; } /** * Generate a relative URL, allowing for extraneous leading "../" segments. * The Java {@link URL#URL(URL, String)} constructor does not remove these. * * @param baseURL * @param location relative location, possibly with extraneous leading "../" * @return URL with extraneous ../ removed * @throws MalformedURLException */ public static URL makeRelativeURL(URL baseURL, String location) throws MalformedURLException{ URL initial = new URL(baseURL,location); // skip expensive processing if it cannot apply if (!location.startsWith("../")){// $NON-NLS-1$ return initial; } String path = initial.getPath(); // Match /../[../] etc. Pattern p = Pattern.compile("^/((?:\\.\\./)+)"); // $NON-NLS-1$ Matcher m = p.matcher(path); if (m.lookingAt()){ String prefix = m.group(1); // get ../ or ../../ etc. if (location.startsWith(prefix)){ return new URL(baseURL, location.substring(prefix.length())); } } return initial; } /** * collapses absolute or relative URLs containing '/..' converting * http://host/path1/../path2 to http://host/path2 or /one/two/../three to * /one/three * * @param url * @return collapsed URL */ public static String removeSlashDotDot(String url) { if (url == null || (url = url.trim()).length() < 4 || !url.contains(SLASHDOTDOT)) { return url; } /** * http://auth@host:port/path1/path2/path3/?query#anchor */ // get to 'path' part of the URL, preserving schema, auth, host if // present // find index of path start int dotSlashSlashIndex = url.indexOf(COLONSLASHSLASH); final int pathStartIndex; if (dotSlashSlashIndex >= 0) { // absolute URL pathStartIndex = url.indexOf(SLASH, dotSlashSlashIndex + COLONSLASHSLASH.length()); } else { // document or context-relative URL like: // '/path/to' // OR '../path/to' // OR '/path/to/../path/' pathStartIndex = 0; } // find path endIndex int pathEndIndex = url.length(); int questionMarkIdx = url.indexOf('?'); if (questionMarkIdx > 0) { pathEndIndex = questionMarkIdx; } else { int anchorIdx = url.indexOf('#'); if (anchorIdx > 0) { pathEndIndex = anchorIdx; } } // path is between idx='pathStartIndex' (inclusive) and // idx='pathEndIndex' (exclusive) String currentPath = url.substring(pathStartIndex, pathEndIndex); final boolean startsWithSlash = currentPath.startsWith(SLASH); final boolean endsWithSlash = currentPath.endsWith(SLASH); StringTokenizer st = new StringTokenizer(currentPath, SLASH); List<String> tokens = new ArrayList Other JMeter examples (source code examples)Here is a short list of links related to this JMeter ConversionUtils.java source code file: |
... this post is sponsored by my books ... | |
![]() #1 New Release! |
![]() FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.