All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.dromara.hutool.http.GlobalHeaders Maven / Gradle / Ivy

There is a newer version: 6.0.0.M3
Show newest version
/*
 * Copyright (c) 2013-2024 Hutool Team and hutool.cn
 *
 * Licensed 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.dromara.hutool.http;

import org.dromara.hutool.core.collection.CollUtil;
import org.dromara.hutool.core.map.MapUtil;
import org.dromara.hutool.core.text.StrUtil;
import org.dromara.hutool.http.meta.HeaderName;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/**
 * 全局头部信息
* 所有Http请求将共用此全局头部信息 * * @author looly */ public enum GlobalHeaders { /** * 单例对象 */ INSTANCE; /** * 存储头信息 */ final Map> headers = new HashMap<>(); /** * 构造 */ GlobalHeaders() { putDefault(false); } /** * 加入默认的头部信息 * * @param isReset 是否重置所有头部信息(删除自定义保留默认) * @return this */ public GlobalHeaders putDefault(final boolean isReset) { // 解决HttpURLConnection中无法自定义Host等头信息的问题 // https://stackoverflow.com/questions/9096987/how-to-overwrite-http-header-host-in-a-httpurlconnection/9098440 System.setProperty("sun.net.http.allowRestrictedHeaders", "true"); //解决server certificate change is restricted during renegotiation问题 System.setProperty("jdk.tls.allowUnsafeServerCertChange", "true"); System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true"); if (isReset) { this.headers.clear(); } //header(Header.ACCEPT, "text/html,application/json,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", true); // 某些请求中这个自定义头会导致请求失败,此处采用与PostMan一致的默认头 header(HeaderName.ACCEPT, "*/*", true); header(HeaderName.ACCEPT_ENCODING, "gzip, deflate", true); // issue#3258,某些场景(如国外)不能指定中文 //header(HeaderName.ACCEPT_LANGUAGE, "zh-CN,zh;q=0.8", true); // 此Header只有在post请求中有用,因此在HttpRequest的method方法中设置此头信息,此处去掉 // header(Header.CONTENT_TYPE, ContentType.FORM_URLENCODED.toString(CharsetUtil.CHARSET_UTF_8), true); header(HeaderName.USER_AGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36 Hutool", true); return this; } // ---------------------------------------------------------------- Headers start /** * 根据name获取头信息 * * @param name Header名 * @return Header值 */ public String header(final String name) { final List values = headerList(name); if (CollUtil.isEmpty(values)) { return null; } return values.get(0); } /** * 根据name获取头信息列表 * * @param name Header名 * @return Header值 * @since 3.1.1 */ public List headerList(final String name) { if (StrUtil.isBlank(name)) { return null; } return headers.get(name.trim()); } /** * 根据name获取头信息 * * @param name Header名 * @return Header值 */ public String header(final HeaderName name) { if (null == name) { return null; } return header(name.toString()); } /** * 设置一个header
* 如果覆盖模式,则替换之前的值,否则加入到值列表中 * * @param name Header名 * @param value Header值 * @param isOverride 是否覆盖已有值 * @return this */ synchronized public GlobalHeaders header(final String name, final String value, final boolean isOverride) { if (null != name && null != value) { final List values = headers.get(name.trim()); if (isOverride || CollUtil.isEmpty(values)) { final ArrayList valueList = new ArrayList<>(); valueList.add(value); headers.put(name.trim(), valueList); } else { values.add(value.trim()); } } return this; } /** * 设置一个header
* 如果覆盖模式,则替换之前的值,否则加入到值列表中 * * @param name Header名 * @param value Header值 * @param isOverride 是否覆盖已有值 * @return this */ public GlobalHeaders header(final HeaderName name, final String value, final boolean isOverride) { return header(name.toString(), value, isOverride); } /** * 设置一个header
* 覆盖模式,则替换之前的值 * * @param name Header名 * @param value Header值 * @return this */ public GlobalHeaders header(final HeaderName name, final String value) { return header(name.toString(), value, true); } /** * 设置一个header
* 覆盖模式,则替换之前的值 * * @param name Header名 * @param value Header值 * @return this */ public GlobalHeaders header(final String name, final String value) { return header(name, value, true); } /** * 设置请求头
* 不覆盖原有请求头 * * @param headers 请求头 * @return this */ public GlobalHeaders header(final Map> headers) { if (MapUtil.isEmpty(headers)) { return this; } String name; for (final Entry> entry : headers.entrySet()) { name = entry.getKey(); for (final String value : entry.getValue()) { this.header(name, StrUtil.toStringOrEmpty(value), false); } } return this; } /** * 移除一个头信息 * * @param name Header名 * @return this */ synchronized public GlobalHeaders removeHeader(final String name) { if (name != null) { headers.remove(name.trim()); } return this; } /** * 移除一个头信息 * * @param name Header名 * @return this */ public GlobalHeaders removeHeader(final HeaderName name) { return removeHeader(name.toString()); } /** * 获取headers * * @return Headers Map */ public Map> headers() { return Collections.unmodifiableMap(headers); } /** * 清除所有头信息,包括全局头信息 * * @return this * @since 5.7.13 */ synchronized public GlobalHeaders clearHeaders() { this.headers.clear(); return this; } // ---------------------------------------------------------------- Headers end }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy