diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 59c36d8ab14..35eb1ddfbbc 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,32 +1,6 @@
-
-
+
-
-
-
-
+
\ No newline at end of file
diff --git a/plugin-mapping.properties b/plugin-mapping.properties
index d72508717b9..c781f7edc18 100644
--- a/plugin-mapping.properties
+++ b/plugin-mapping.properties
@@ -105,4 +105,6 @@ seatunnel.source.Persistiq = connector-http-persistiq
seatunnel.sink.SelectDBCloud = connector-selectdb-cloud
seatunnel.sink.Hbase = connector-hbase
seatunnel.source.StarRocks = connector-starrocks
+seatunnel.source.AuthSource = connector-http-auth
+
diff --git a/seatunnel-connectors-v2/connector-http/connector-http-plus/pom.xml b/seatunnel-connectors-v2/connector-http/connector-http-plus/pom.xml
new file mode 100644
index 00000000000..d56f95cc3fe
--- /dev/null
+++ b/seatunnel-connectors-v2/connector-http/connector-http-plus/pom.xml
@@ -0,0 +1,32 @@
+
+
+ 4.0.0
+
+ org.apache.seatunnel
+ seatunnel-connectors-v2
+ 2.3.2-SNAPSHOT
+ ../../pom.xml
+
+
+ connector-http-plus
+ SeaTunnel : Connectors V2 : Http : Plus
+
+
+ 8
+ 8
+ UTF-8
+
+
+
+ org.apache.seatunnel
+ connector-http-base
+ ${project.version}
+
+
+ org.apache.commons
+ commons-lang3
+
+
+
\ No newline at end of file
diff --git a/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/AbstractRequestHandler.java b/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/AbstractRequestHandler.java
new file mode 100644
index 00000000000..67148945f94
--- /dev/null
+++ b/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/AbstractRequestHandler.java
@@ -0,0 +1,17 @@
+package org.apache.seatunnel.plus.source;
+
+import org.apache.seatunnel.connectors.seatunnel.http.config.HttpParameter;
+import org.apache.seatunnel.shade.com.typesafe.config.Config;
+
+public abstract class AbstractRequestHandler {
+
+ public void before(Config pluginConfig){
+
+ }
+
+ public void after(Config pluginConfig){
+
+ }
+
+ abstract public void request(Config pluginConfig, HttpParameter httpParameter);
+}
diff --git a/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/HttpPlusSource.java b/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/HttpPlusSource.java
new file mode 100644
index 00000000000..fe8ab8f86ed
--- /dev/null
+++ b/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/HttpPlusSource.java
@@ -0,0 +1,83 @@
+/*
+ * 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.seatunnel.plus.source;
+
+import org.apache.seatunnel.api.common.PrepareFailException;
+import org.apache.seatunnel.api.source.Boundedness;
+import org.apache.seatunnel.api.source.SeaTunnelSource;
+import org.apache.seatunnel.api.table.catalog.CatalogTableUtil;
+import org.apache.seatunnel.api.table.type.SeaTunnelRow;
+import org.apache.seatunnel.common.constants.JobMode;
+
+
+import org.apache.seatunnel.common.exception.CommonErrorCode;
+import org.apache.seatunnel.connectors.seatunnel.common.source.AbstractSingleSplitReader;
+import org.apache.seatunnel.connectors.seatunnel.common.source.SingleSplitReaderContext;
+import org.apache.seatunnel.connectors.seatunnel.http.config.HttpConfig;
+import org.apache.seatunnel.connectors.seatunnel.http.exception.HttpConnectorException;
+import org.apache.seatunnel.connectors.seatunnel.http.source.HttpSource;
+import org.apache.seatunnel.connectors.seatunnel.http.source.HttpSourceReader;
+import org.apache.seatunnel.connectors.seatunnel.http.source.SimpleTextDeserializationSchema;
+import org.apache.seatunnel.format.json.JsonDeserializationSchema;
+import org.apache.seatunnel.plus.source.config.HttpPlusSourceParameter;
+import org.apache.seatunnel.shade.com.typesafe.config.Config;
+
+import java.util.Locale;
+
+import com.google.auto.service.AutoService;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@AutoService(SeaTunnelSource.class)
+public class HttpPlusSource extends HttpSource {
+
+ private Config pluginConfig;
+ private HttpPlusSourceParameter plusSourceParameter=new HttpPlusSourceParameter();
+
+ @Override
+ public String getPluginName() {
+ return "Plus";
+ }
+
+ @Override
+ public void prepare(Config pluginConfig) throws PrepareFailException {
+ //如果配置包名那么校验内容
+ buildSchemaWithConfig(pluginConfig);
+ this.pluginConfig=pluginConfig;
+ }
+
+ @Override
+ public AbstractSingleSplitReader createReader(SingleSplitReaderContext readerContext) throws Exception {
+ return new HttpPlusSourceReader(plusSourceParameter,
+ readerContext,
+ this.deserializationSchema,
+ jsonField,
+ contentField,pluginConfig);
+ }
+
+ @Override
+ public Boundedness getBoundedness() {
+ if (JobMode.BATCH.equals(jobContext.getJobMode())) {
+ return Boundedness.BOUNDED;
+ }
+ throw new UnsupportedOperationException(
+ "http-plus source connector not support unbounded operation");
+ }
+
+
+}
diff --git a/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/HttpPlusSourceFactory.java b/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/HttpPlusSourceFactory.java
new file mode 100644
index 00000000000..6d385e99cd8
--- /dev/null
+++ b/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/HttpPlusSourceFactory.java
@@ -0,0 +1,39 @@
+/*
+ * 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.seatunnel.auth.source;
+
+import org.apache.seatunnel.api.configuration.util.OptionRule;
+import org.apache.seatunnel.api.table.factory.Factory;
+import org.apache.seatunnel.connectors.seatunnel.http.source.HttpSourceFactory;
+
+import com.google.auto.service.AutoService;
+
+@AutoService(Factory.class)
+public class AuthSourceFactory extends HttpSourceFactory {
+ @Override
+ public String factoryIdentifier() {
+ return "Gitlab";
+ }
+
+ @Override
+ public OptionRule optionRule() {
+ return getHttpBuilder().required(GitlabSourceConfig.ACCESS_TOKEN).build();
+ }
+}
+*/
diff --git a/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/HttpPlusSourceReader.java b/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/HttpPlusSourceReader.java
new file mode 100644
index 00000000000..9aeb4db2863
--- /dev/null
+++ b/seatunnel-connectors-v2/connector-http/connector-http-plus/src/main/java/org/apache/seatunnel/plus/source/HttpPlusSourceReader.java
@@ -0,0 +1,219 @@
+/*
+ * 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.seatunnel.plus.source;
+
+import org.apache.seatunnel.api.serialization.DeserializationSchema;
+import org.apache.seatunnel.api.source.Boundedness;
+import org.apache.seatunnel.api.source.Collector;
+import org.apache.seatunnel.api.table.type.SeaTunnelRow;
+import org.apache.seatunnel.common.utils.JsonUtils;
+import org.apache.seatunnel.connectors.seatunnel.common.source.AbstractSingleSplitReader;
+import org.apache.seatunnel.connectors.seatunnel.common.source.SingleSplitReaderContext;
+import org.apache.seatunnel.connectors.seatunnel.http.client.HttpClientProvider;
+import org.apache.seatunnel.connectors.seatunnel.http.client.HttpResponse;
+import org.apache.seatunnel.connectors.seatunnel.http.config.HttpParameter;
+import org.apache.seatunnel.connectors.seatunnel.http.config.JsonField;
+import org.apache.seatunnel.connectors.seatunnel.http.exception.HttpConnectorErrorCode;
+import org.apache.seatunnel.connectors.seatunnel.http.exception.HttpConnectorException;
+import org.apache.seatunnel.connectors.seatunnel.http.source.DeserializationCollector;
+import org.apache.seatunnel.shade.com.typesafe.config.Config;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import com.google.common.base.Strings;
+import com.jayway.jsonpath.Configuration;
+import com.jayway.jsonpath.JsonPath;
+import com.jayway.jsonpath.Option;
+import com.jayway.jsonpath.ReadContext;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class HttpPlusSourceReader extends AbstractSingleSplitReader {
+ protected final SingleSplitReaderContext context;
+ protected final HttpParameter httpParameter;
+ protected HttpClientProvider httpClient;
+ private final DeserializationCollector deserializationCollector;
+ private static final Option[] DEFAULT_OPTIONS = {
+ Option.SUPPRESS_EXCEPTIONS, Option.ALWAYS_RETURN_LIST, Option.DEFAULT_PATH_LEAF_TO_NULL
+ };
+ private JsonPath[] jsonPaths;
+ private final JsonField jsonField;
+ private final String contentJson;
+ private Config pluginConfig;
+ private final Configuration jsonConfiguration =
+ Configuration.defaultConfiguration().addOptions(DEFAULT_OPTIONS);
+
+ public HttpPlusSourceReader(
+ HttpParameter httpParameter,
+ SingleSplitReaderContext context,
+ DeserializationSchema deserializationSchema,
+ JsonField jsonField,
+ String contentJson,
+ Config pluginConfig) {
+ this.context = context;
+ this.httpParameter = httpParameter;
+ this.deserializationCollector = new DeserializationCollector(deserializationSchema);
+ this.jsonField = jsonField;
+ this.contentJson = contentJson;
+ this.pluginConfig=pluginConfig;
+ }
+
+ @Override
+ public void open() {
+ httpClient = new HttpClientProvider(httpParameter);
+ }
+
+ @Override
+ public void close() throws IOException {
+ if (Objects.nonNull(httpClient)) {
+ httpClient.close();
+ }
+ }
+
+ @Override
+ public void pollNext(Collector output) throws Exception {
+ try {
+ new QimenRequestHandler().request(pluginConfig,httpParameter);
+ HttpResponse response =
+ httpClient.execute(
+ this.httpParameter.getUrl(),
+ this.httpParameter.getMethod().getMethod(),
+ this.httpParameter.getHeaders(),
+ this.httpParameter.getParams(),
+ this.httpParameter.getBody());
+ if (HttpResponse.STATUS_OK == response.getCode()) {
+ String content = response.getContent();
+ if (!Strings.isNullOrEmpty(content)) {
+ if (contentJson != null) {
+ content = JsonUtils.stringToJsonNode(getPartOfJson(content)).toString();
+ }
+ if (jsonField != null) {
+ this.initJsonPath(jsonField);
+ content =
+ JsonUtils.toJsonNode(parseToMap(decodeJSON(content), jsonField))
+ .toString();
+ }
+ deserializationCollector.collect(content.getBytes(), output);
+ }
+ return;
+ }
+ log.error(
+ "http client execute exception, http response status code:[{}], content:[{}]",
+ response.getCode(),
+ response.getContent());
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ } finally {
+ if (Boundedness.BOUNDED.equals(context.getBoundedness())) {
+ // signal to the source that we have reached the end of the data.
+ log.info("Closed the bounded http source");
+ context.signalNoMoreElement();
+ } else {
+ if (httpParameter.getPollIntervalMillis() > 0) {
+ Thread.sleep(httpParameter.getPollIntervalMillis());
+ }
+ }
+ }
+ }
+
+ private List