mirror of https://github.com/FongMi/TV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
4.6 KiB
108 lines
4.6 KiB
package com.fongmi.quickjs.utils;
|
|
|
|
import com.fongmi.quickjs.bean.Req;
|
|
import com.github.catvod.net.OkHttp;
|
|
import com.github.catvod.utils.Json;
|
|
import com.github.catvod.utils.Util;
|
|
import com.google.common.net.HttpHeaders;
|
|
import com.whl.quickjs.wrapper.JSObject;
|
|
import com.whl.quickjs.wrapper.QuickJSContext;
|
|
import java.security.SecureRandom;
|
|
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Random;
|
|
|
|
import okhttp3.Call;
|
|
import okhttp3.FormBody;
|
|
import okhttp3.Headers;
|
|
import okhttp3.MediaType;
|
|
import okhttp3.MultipartBody;
|
|
import okhttp3.OkHttpClient;
|
|
import okhttp3.Request;
|
|
import okhttp3.RequestBody;
|
|
import okhttp3.Response;
|
|
|
|
public class Connect {
|
|
|
|
public static Call to(String url, Req req) {
|
|
OkHttpClient client = OkHttp.client(req.isRedirect(), req.getTimeout());
|
|
return client.newCall(getRequest(url, req, Headers.of(req.getHeader())));
|
|
}
|
|
|
|
public static JSObject success(QuickJSContext ctx, Req req, Response res) {
|
|
try {
|
|
JSObject jsObject = ctx.createNewJSObject();
|
|
JSObject jsHeader = ctx.createNewJSObject();
|
|
setHeader(ctx, res, jsHeader);
|
|
jsObject.setProperty("code", res.code());
|
|
jsObject.setProperty("headers", jsHeader);
|
|
if (req.getBuffer() == 0) jsObject.setProperty("content", new String(res.body().bytes(), req.getCharset()));
|
|
if (req.getBuffer() == 1) jsObject.setProperty("content", JSUtil.toArray(ctx, res.body().bytes()));
|
|
if (req.getBuffer() == 2) jsObject.setProperty("content", Util.base64(res.body().bytes()));
|
|
return jsObject;
|
|
} catch (Exception e) {
|
|
return error(ctx);
|
|
}
|
|
}
|
|
|
|
public static JSObject error(QuickJSContext ctx) {
|
|
JSObject jsObject = ctx.createNewJSObject();
|
|
JSObject jsHeader = ctx.createNewJSObject();
|
|
jsObject.setProperty("headers", jsHeader);
|
|
jsObject.setProperty("content", "");
|
|
jsObject.setProperty("code", "");
|
|
return jsObject;
|
|
}
|
|
|
|
private static Request getRequest(String url, Req req, Headers headers) {
|
|
if (req.getMethod().equalsIgnoreCase("post")) {
|
|
return new Request.Builder().url(url).headers(headers).post(getPostBody(req, headers.get(HttpHeaders.CONTENT_TYPE))).build();
|
|
} else if (req.getMethod().equalsIgnoreCase("header")) {
|
|
return new Request.Builder().url(url).headers(headers).head().build();
|
|
} else {
|
|
return new Request.Builder().url(url).headers(headers).get().build();
|
|
}
|
|
}
|
|
|
|
private static RequestBody getPostBody(Req req, String contentType) {
|
|
if (req.getData() != null && "json".equals(req.getPostType())) return getJsonBody(req);
|
|
if (req.getData() != null && "form".equals(req.getPostType())) return getFormBody(req);
|
|
if (req.getData() != null && "form-data".equals(req.getPostType())) return getFormDataBody(req);
|
|
if (req.getData() != null && "raw".equals(req.getPostType())) return getRawBody(req);
|
|
if (req.getBody() != null && contentType != null) return RequestBody.create(req.getBody(), MediaType.get(contentType));
|
|
return RequestBody.create("", null);
|
|
}
|
|
|
|
private static RequestBody getJsonBody(Req req) {
|
|
return RequestBody.create(req.getData().toString(), MediaType.get("application/json"));
|
|
}
|
|
|
|
private static RequestBody getRawBody(Req req) {
|
|
return RequestBody.create(req.getData().toString(), MediaType.get("application/json; charset=utf-8"));
|
|
}
|
|
|
|
private static RequestBody getFormBody(Req req) {
|
|
FormBody.Builder builder = new FormBody.Builder();
|
|
Map<String, String> params = Json.toMap(req.getData());
|
|
for (String key : params.keySet()) builder.add(key, params.get(key));
|
|
return builder.build();
|
|
}
|
|
|
|
private static RequestBody getFormDataBody(Req req) {
|
|
String boundary = "--dio-boundary-" + new SecureRandom().nextInt(42949) + "" + new SecureRandom().nextInt(67296);
|
|
MultipartBody.Builder builder = new MultipartBody.Builder(boundary).setType(MultipartBody.FORM);
|
|
Map<String, String> params = Json.toMap(req.getData());
|
|
for (String key : params.keySet()) builder.addFormDataPart(key, params.get(key));
|
|
return builder.build();
|
|
}
|
|
|
|
|
|
|
|
private static void setHeader(QuickJSContext ctx, Response res, JSObject object) {
|
|
for (Map.Entry<String, List<String>> entry : res.headers().toMultimap().entrySet()) {
|
|
if (entry.getValue().size() == 1) object.setProperty(entry.getKey(), entry.getValue().get(0));
|
|
if (entry.getValue().size() >= 2) object.setProperty(entry.getKey(), JSUtil.toArray(ctx, entry.getValue()));
|
|
}
|
|
}
|
|
}
|
|
|