Mega Code Archive

 
Categories / Java Tutorial / Network
 

Http Header Helper

/**  * 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.  */ import java.nio.charset.Charset; import java.nio.charset.IllegalCharsetNameException; import java.nio.charset.UnsupportedCharsetException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public final class HttpHeaderHelper {     public static final String ACCEPT_ENCODING = "Accept-Encoding";     public static final String CONTENT_TYPE = "Content-Type";     public static final String CONTENT_ID = "Content-ID";     public static final String CONTENT_ENCODING = "Content-Encoding";     public static final String CONTENT_TRANSFER_ENCODING = "Content-Transfer-Encoding";     public static final String COOKIE = "Cookie";     public static final String TRANSFER_ENCODING = "Transfer-Encoding";     public static final String CHUNKED = "chunked";     public static final String CONNECTION = "Connection";     public static final String CLOSE = "close";     public static final String AUTHORIZATION = "Authorization";     private static final Charset UTF8 = Charset.forName("utf-8");           private static Map<String, String> internalHeaders = new HashMap<String, String>();     private static Map<String, String> encodings = new ConcurrentHashMap<String, String>();          static {         internalHeaders.put("Accept-Encoding", "accept-encoding");         internalHeaders.put("Content-Encoding", "content-encoding");         internalHeaders.put("Content-Type", "content-type");         internalHeaders.put("Content-ID", "content-id");         internalHeaders.put("Content-Transfer-Encoding", "content-transfer-encoding");          internalHeaders.put("Transfer-Encoding", "transfer-encoding");         internalHeaders.put("Connection", "connection");         internalHeaders.put("authorization", "Authorization");         internalHeaders.put("soapaction", "SOAPAction");         internalHeaders.put("accept", "Accept");     }          private HttpHeaderHelper() {              }          public static List getHeader(Map<String, List<String>> headerMap, String key) {         return headerMap.get(getHeaderKey(key));     }          public static String getHeaderKey(String key) {         if (internalHeaders.containsKey(key)) {             return internalHeaders.get(key);         } else {             return key;         }     }          //helper to map the charsets that various things send in the http Content-Type header      //into something that is actually supported by Java and the Stax parsers and such.     public static String mapCharset(String enc) {         if (enc == null) {             return UTF8.name();         }         //older versions of tomcat don't properly parse ContentType headers with stuff         //after charset="UTF-8"         int idx = enc.indexOf(";");         if (idx != -1) {             enc = enc.substring(0, idx);         }         // Charsets can be quoted. But it's quite certain that they can't have escaped quoted or         // anything like that.         enc = enc.replace("\"", "").trim();         enc = enc.replace("'", "");         if ("".equals(enc)) {             return UTF8.name();         }         String newenc = encodings.get(enc);         if (newenc == null) {             try {                 newenc = Charset.forName(enc).name();             } catch (IllegalCharsetNameException icne) {                 return null;             } catch (UnsupportedCharsetException uce) {                 return null;             }             encodings.put(enc, newenc);         }         return newenc;     } }