diff --git a/powerjob-offical-processors/pom.xml b/powerjob-offical-processors/pom.xml
index ebcfa1b9..7598c137 100644
--- a/powerjob-offical-processors/pom.xml
+++ b/powerjob-offical-processors/pom.xml
@@ -13,5 +13,108 @@
3.4.5
jar
+
+
+ 3.2.4
+
+
+ 5.6.1
+ 1.2.3
+ 3.4.4
+
+
+ 1.2.68
+ 3.14.9
+ 29.0-jre
+ 3.10
+
+
+
+
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ ${okhttp.version}
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons.lang.version}
+
+
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+
+ com.github.kfcfans
+ powerjob-worker
+ ${powerjob.worker.version}
+ provided
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit.version}
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ ${mvn.shade.plugin.version}
+
+ false
+
+
+ okhttp3
+ shade.powerjob.okhttp3
+
+
+ okio
+ shade.powerjob.okio
+
+
+ com
+ shade.powerjob.com
+
+
+ org
+ shade.powerjob.org
+
+
+ javax
+ shade.powerjob.javax
+
+
+
+
+
+ package
+
+ shade
+
+
+
+
+
+
\ No newline at end of file
diff --git a/powerjob-offical-processors/src/main/java/tech/powerjob/offical/processors/CommonBasicProcessor.java b/powerjob-offical-processors/src/main/java/tech/powerjob/offical/processors/CommonBasicProcessor.java
new file mode 100644
index 00000000..72d06441
--- /dev/null
+++ b/powerjob-offical-processors/src/main/java/tech/powerjob/offical/processors/CommonBasicProcessor.java
@@ -0,0 +1,46 @@
+package tech.powerjob.offical.processors;
+
+import com.github.kfcfans.powerjob.worker.core.processor.ProcessResult;
+import com.github.kfcfans.powerjob.worker.core.processor.TaskContext;
+import com.github.kfcfans.powerjob.worker.core.processor.sdk.BasicProcessor;
+import com.github.kfcfans.powerjob.worker.log.OmsLogger;
+import com.google.common.base.Stopwatch;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+/**
+ * CommonBasicProcessor
+ *
+ * @author tjq
+ * @since 2021/1/30
+ */
+public abstract class CommonBasicProcessor implements BasicProcessor {
+
+ @Override
+ public ProcessResult process(TaskContext taskContext) throws Exception {
+
+ String clzName = this.getClass().getSimpleName();
+ OmsLogger omsLogger = taskContext.getOmsLogger();
+ omsLogger.info("[{}] using params: {}", clzName, taskContext.getJobParams());
+
+ try {
+ Stopwatch sw = Stopwatch.createStarted();
+ ProcessResult result = process0(taskContext);
+ omsLogger.info("[{}] execute succeed, using {}, result: {}", clzName, sw, result);
+ return suit(result);
+ } catch (Throwable t) {
+ omsLogger.error("[{}] execute failed!", clzName, t);
+ return new ProcessResult(false, ExceptionUtils.getMessage(t));
+ }
+ }
+
+ private static ProcessResult suit(ProcessResult processResult) {
+ if (processResult.getMsg() == null || processResult.getMsg().length() < 1024) {
+ return processResult;
+ }
+ processResult.setMsg(processResult.getMsg().substring(0, 1024) + "...");
+ return processResult;
+ }
+
+ protected abstract ProcessResult process0(TaskContext taskContext) throws Exception;
+}
+
diff --git a/powerjob-offical-processors/src/main/java/tech/powerjob/offical/processors/impl/HttpProcessor.java b/powerjob-offical-processors/src/main/java/tech/powerjob/offical/processors/impl/HttpProcessor.java
new file mode 100644
index 00000000..9211c674
--- /dev/null
+++ b/powerjob-offical-processors/src/main/java/tech/powerjob/offical/processors/impl/HttpProcessor.java
@@ -0,0 +1,121 @@
+package tech.powerjob.offical.processors.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSONValidator;
+import com.github.kfcfans.powerjob.worker.core.processor.ProcessResult;
+import com.github.kfcfans.powerjob.worker.core.processor.TaskContext;
+import com.github.kfcfans.powerjob.worker.log.OmsLogger;
+import lombok.Data;
+import okhttp3.*;
+import org.apache.commons.lang3.StringUtils;
+import tech.powerjob.offical.processors.CommonBasicProcessor;
+
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * common http processor
+ *
+ * @author tjq
+ * @since 2021/1/30
+ */
+public class HttpProcessor extends CommonBasicProcessor {
+
+ private static final OkHttpClient client;
+
+ static {
+ client = new OkHttpClient.Builder()
+ .connectTimeout(10, TimeUnit.SECONDS)
+ .readTimeout(60, TimeUnit.SECONDS)
+ .build();
+ }
+
+ @Override
+ public ProcessResult process0(TaskContext taskContext) throws Exception {
+ OmsLogger omsLogger = taskContext.getOmsLogger();
+ HttpParams httpParams = JSONObject.parseObject(taskContext.getJobParams(), HttpParams.class);
+
+ if (StringUtils.isEmpty(httpParams.url)) {
+ return new ProcessResult(false, "url can't be empty!");
+ }
+
+ if (!httpParams.url.startsWith("http")) {
+ httpParams.url = "http://" + httpParams.url;
+ }
+ omsLogger.info("[HttpProcessor] request url: {}", httpParams.url);
+
+ // set default method
+ if (StringUtils.isEmpty(httpParams.method)) {
+ httpParams.method = "GET";
+ omsLogger.info("[HttpProcessor] using default request method: GET");
+ } else {
+ omsLogger.info("[HttpProcessor] request method: {}", httpParams.method);
+ }
+
+ // set default mediaType
+ if (!"GET".equals(httpParams.method) && StringUtils.isEmpty(httpParams.mediaType)) {
+ if (JSONValidator.from(httpParams.body).validate()) {
+ httpParams.mediaType = "application/json";
+ omsLogger.warn("[HttpProcessor] try to use 'application/json' as media type");
+ }
+ }
+
+ Request.Builder builder = new Request.Builder().url(httpParams.url);
+ if (httpParams.headers != null) {
+ httpParams.headers.forEach((k, v) -> {
+ builder.addHeader(k, v);
+ omsLogger.info("[HttpProcessor] add header {}:{}", k, v);
+ });
+ }
+
+ switch (httpParams.method) {
+ case "PUT":
+ case "DELETE":
+ case "POST":
+ MediaType mediaType = MediaType.parse(httpParams.mediaType);
+ omsLogger.info("[HttpProcessor] mediaType: {}", mediaType);
+ RequestBody requestBody = RequestBody.create(mediaType, httpParams.body);
+ builder.method(httpParams.method, requestBody);
+ break;
+ default:
+ builder.get();
+ }
+
+ Response response = client.newCall(builder.build()).execute();
+ omsLogger.info("[HttpProcessor] response: {}", response);
+
+ String msgBody = "";
+ if (response.body() != null) {
+ msgBody = response.body().string();
+ }
+
+ String res = String.format("code:%d,body:%s", response.code(), msgBody);
+ omsLogger.info("[HttpProcessor] process result: {}", res);
+
+ return new ProcessResult(true, res);
+ }
+
+ @Data
+ public static class HttpParams {
+ /**
+ * POST / GET / PUT / DELETE
+ */
+ private String method;
+ /**
+ * the request url
+ */
+ private String url;
+ /**
+ * application/json
+ * application/xml
+ * image/png
+ * image/jpeg
+ * image/gif
+ */
+ private String mediaType;
+
+ private String body;
+
+ private Map headers;
+ }
+}
diff --git a/powerjob-offical-processors/src/test/java/tech/powerjob/offical/processors/TestUtils.java b/powerjob-offical-processors/src/test/java/tech/powerjob/offical/processors/TestUtils.java
new file mode 100644
index 00000000..bd24a449
--- /dev/null
+++ b/powerjob-offical-processors/src/test/java/tech/powerjob/offical/processors/TestUtils.java
@@ -0,0 +1,30 @@
+package tech.powerjob.offical.processors;
+
+import com.github.kfcfans.powerjob.worker.core.processor.TaskContext;
+import com.github.kfcfans.powerjob.worker.log.impl.OmsServerLogger;
+
+import java.util.concurrent.ThreadLocalRandom;
+
+/**
+ * TestUtils
+ *
+ * @author tjq
+ * @since 2021/1/30
+ */
+public class TestUtils {
+
+ public static TaskContext genTaskContext(String jobParams) {
+
+ long jobId = ThreadLocalRandom.current().nextLong();
+
+ TaskContext taskContext = new TaskContext();
+ taskContext.setJobId(jobId);
+ taskContext.setInstanceId(jobId);
+ taskContext.setJobParams(jobParams);
+ taskContext.setTaskId("0.0");
+ taskContext.setTaskName("TEST_TASK");
+ taskContext.setOmsLogger(new OmsServerLogger(jobId));
+
+ return taskContext;
+ }
+}
diff --git a/powerjob-offical-processors/src/test/java/tech/powerjob/offical/processors/impl/HttpProcessorTest.java b/powerjob-offical-processors/src/test/java/tech/powerjob/offical/processors/impl/HttpProcessorTest.java
new file mode 100644
index 00000000..29346d1e
--- /dev/null
+++ b/powerjob-offical-processors/src/test/java/tech/powerjob/offical/processors/impl/HttpProcessorTest.java
@@ -0,0 +1,38 @@
+package tech.powerjob.offical.processors.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import org.junit.jupiter.api.Test;
+import tech.powerjob.offical.processors.TestUtils;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * HttpProcessorTest
+ *
+ * @author tjq
+ * @since 2021/1/31
+ */
+class HttpProcessorTest {
+
+ @Test
+ void testGet() throws Exception {
+ String url = "https://www.baidu.com";
+ JSONObject params = new JSONObject();
+ params.put("url", url);
+ params.put("method", "GET");
+
+ System.out.println(new HttpProcessor().process(TestUtils.genTaskContext(params.toJSONString())));
+ }
+
+ @Test
+ void testPost() throws Exception {
+ String url = "https://mock.uutool.cn/4f5qfgcdahj0?test=true";
+ JSONObject params = new JSONObject();
+ params.put("url", url);
+ params.put("method", "POST");
+ params.put("mediaType", "application/json");
+ params.put("body", params.toJSONString());
+
+ System.out.println(new HttpProcessor().process(TestUtils.genTaskContext(params.toJSONString())));
+ }
+}
\ No newline at end of file