删除 EmoneyRequestConfig 和 ProxyConfig 设置,改为数据库(SQLite)配置。默认配置的设置和删除逻辑由
SQLite 触发器配置。
This commit is contained in:
@@ -16,7 +16,7 @@ public class ByteBuddyTest {
|
||||
|
||||
PatchOkHttp.apply(
|
||||
r -> r.not(a -> a.isHttps())
|
||||
.overrideIf("User-Agent", "okhttp/3.12.2")
|
||||
.overrideHeader("User-Agent", "okhttp/3.12.2")
|
||||
);
|
||||
|
||||
OkHttpClient client = new OkHttpClient();
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
import com.microsoft.playwright.*;
|
||||
import com.microsoft.playwright.BrowserType.LaunchOptions;
|
||||
import com.microsoft.playwright.Route.ResumeOptions;
|
||||
import com.microsoft.playwright.options.HttpHeader;
|
||||
import com.microsoft.playwright.options.Proxy;
|
||||
import com.microsoft.playwright.options.WaitUntilState;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class EmoneyScraper {
|
||||
public static void main(String[] args) {
|
||||
try (Playwright playwright = Playwright.create()) {
|
||||
// 设置浏览器上下文选项,包括 User-Agent
|
||||
Proxy proxy = new Proxy("http://127.0.0.1:8888");
|
||||
LaunchOptions launchOptions = new BrowserType.LaunchOptions()
|
||||
.setHeadless(true)
|
||||
.setProxy(proxy);
|
||||
Browser browser = playwright.chromium().launch(launchOptions);
|
||||
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
|
||||
.setUserAgent("Mozilla/5.0 (Linux; Android 9; PCRT00 Build/PQ3B.190801.11191547; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Mobile Safari/537.36"));
|
||||
|
||||
// 设置全局请求头
|
||||
Map<String, String> headers = new HashMap<>();
|
||||
headers.put("Upgrade-Insecure-Requests", "1");
|
||||
headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
|
||||
headers.put("X-Requested-With", "cn.emoney.emstock");
|
||||
headers.put("Sec-Fetch-Site", "none");
|
||||
headers.put("Sec-Fetch-Mode", "navigate");
|
||||
headers.put("Sec-Fetch-User", "?1");
|
||||
headers.put("Sec-Fetch-Dest", "document");
|
||||
headers.put("Accept-Encoding", "gzip, deflate");
|
||||
headers.put("Accept-Language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7");
|
||||
|
||||
context.setExtraHTTPHeaders(headers);
|
||||
context.route("**/*", route -> {
|
||||
Request request = route.request();
|
||||
List<HttpHeader> requestHeaderList = request.headersArray();
|
||||
Map<String, String> requestHeaders = new HashMap<>();
|
||||
for (HttpHeader header : requestHeaderList) {
|
||||
requestHeaders.put(header.name, header.value);
|
||||
}
|
||||
requestHeaders.remove("sec-ch-ua");
|
||||
requestHeaders.remove("sec-ch-ua-mobile");
|
||||
requestHeaders.remove("sec-ch-ua-platform");
|
||||
route.resume(new ResumeOptions().setHeaders(requestHeaders));
|
||||
});
|
||||
|
||||
Page page = context.newPage();
|
||||
|
||||
page.onResponse(handler -> {
|
||||
String url = handler.request().url();
|
||||
if (url.endsWith(".js")) {
|
||||
String str = handler.request().response().text();
|
||||
System.out.println(str);
|
||||
}
|
||||
});
|
||||
|
||||
String url = "https://appstatic.emoney.cn/html/emapp/stock/note/?name=10003001&emoneyScaleType=0&emoneyLandMode=0&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6IkpXVCJ9.eyJ1dWQiOjEwMTA2NjAwNDcsInVpZCI6MjQ3NjY5MDIsImRpZCI6IjdmOTA3N2VjZTlmMWIxMjQ4NmZmYjRmNDhjMzdkODJhIiwidHlwIjoxLCJhY2MiOiJlbXkxNzMwOTc4Iiwic3d0IjoxLCJsZ3QiOjE3NDQ1OTY2NTY3MTgsIm5iZiI6MTc0NDU5NjY1NiwiZXhwIjoxNzQ2MzI0NjU2LCJpYXQiOjE3NDQ1OTY2NTZ9.SHLqiavrzkwtLfxaWbA6GfnF7iBqbjnv86PTOhumiGc";
|
||||
|
||||
page.navigate(url, new Page.NavigateOptions().setWaitUntil(WaitUntilState.NETWORKIDLE));
|
||||
|
||||
String html = page.content();
|
||||
System.out.println(html);
|
||||
|
||||
browser.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,8 @@ import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import quant.rich.emoney.entity.config.EmoneyRequestConfig;
|
||||
import quant.rich.emoney.entity.config.DeviceInfoConfig.DeviceInfo;
|
||||
|
||||
public class FingerprintsSpliter {
|
||||
|
||||
@@ -34,9 +34,9 @@ import okhttp3.Response;
|
||||
import quant.rich.emoney.EmoneyAutoApplication;
|
||||
import quant.rich.emoney.client.EmoneyClient;
|
||||
import quant.rich.emoney.client.OkHttpClientProvider;
|
||||
import quant.rich.emoney.entity.config.EmoneyRequestConfig;
|
||||
import quant.rich.emoney.pojo.dto.NonParamsIndexDetail;
|
||||
import quant.rich.emoney.pojo.dto.NonParamsIndexDetail.NonParamsIndexDetailData;
|
||||
import quant.rich.emoney.service.sqlite.RequestInfoService;
|
||||
|
||||
@SpringBootTest
|
||||
@ContextConfiguration(classes = EmoneyAutoApplication.class)
|
||||
@@ -47,7 +47,7 @@ public class EmoneyIndexScraper {
|
||||
private static final ObjectMapper MAPPER = new ObjectMapper();
|
||||
|
||||
@Autowired
|
||||
EmoneyRequestConfig emoneyRequestConfig;
|
||||
RequestInfoService requestInfoService;
|
||||
|
||||
static {
|
||||
MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
@@ -58,7 +58,7 @@ public class EmoneyIndexScraper {
|
||||
urlBuilder.append("https://appstatic.emoney.cn/html/emapp/stock/note/?name=");
|
||||
urlBuilder.append(indexCode.toString());
|
||||
urlBuilder.append("&emoneyScaleType=0&emoneyLandMode=0&token=");
|
||||
urlBuilder.append(emoneyRequestConfig.getAuthorization());
|
||||
urlBuilder.append(requestInfoService.getDefaultRequestInfo().getAuthorization());
|
||||
return urlBuilder.toString();
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ public class EmoneyIndexScraper {
|
||||
.header("Host", "appstatic.emoney.cn")
|
||||
.header("Connection", "keep-alive")
|
||||
.header("Upgrade-Insecure-Requests", "1")
|
||||
.header("User-Agent", emoneyRequestConfig.getWebviewUserAgent())
|
||||
.header("User-Agent", requestInfoService.getDefaultRequestInfo().getWebviewUserAgent())
|
||||
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
|
||||
.header("X-Request-With", "cn.emoney.emstock")
|
||||
.header("Sec-Fetch-Site", "none")
|
||||
@@ -124,7 +124,7 @@ public class EmoneyIndexScraper {
|
||||
Request.Builder scriptBuilder = new Request.Builder()
|
||||
.header("Host", "appstatic.emoney.cn")
|
||||
.header("Connection", "keep-alive")
|
||||
.header("User-Agent", emoneyRequestConfig.getWebviewUserAgent())
|
||||
.header("User-Agent", requestInfoService.getDefaultRequestInfo().getWebviewUserAgent())
|
||||
.header("Accept", "*/*")
|
||||
.header("X-Request-With", "cn.emoney.emstock")
|
||||
.header("Sec-Fetch-Site", "same-origin")
|
||||
@@ -160,7 +160,6 @@ public class EmoneyIndexScraper {
|
||||
|
||||
// 将每个 jsonString 转换为 jsonArray,进一步转换成 IndexDetail
|
||||
List<NonParamsIndexDetail> valid = new ArrayList<>();
|
||||
List<ArrayNode> arrayNodes = new ArrayList<>();
|
||||
for (String jsonString : matchGroups) {
|
||||
try {
|
||||
JsonNode root = MAPPER.readTree(jsonString);
|
||||
@@ -189,7 +188,7 @@ public class EmoneyIndexScraper {
|
||||
Request.Builder imageBuilder = new Request.Builder()
|
||||
.header("Host", "appstatic.emoney.cn")
|
||||
.header("Connection", "keep-alive")
|
||||
.header("User-Agent", emoneyRequestConfig.getWebviewUserAgent())
|
||||
.header("User-Agent", requestInfoService.getDefaultRequestInfo().getWebviewUserAgent())
|
||||
.header("Accept", "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8")
|
||||
.header("X-Request-With", "cn.emoney.emstock")
|
||||
.header("Sec-Fetch-Site", "same-origin")
|
||||
|
||||
@@ -31,7 +31,7 @@ public class PatchOkHttpTest {
|
||||
.or(c -> c.hostContains("localhost"))
|
||||
.or(a -> a.hostContains("emapp"))
|
||||
.or(b -> b.hasHeaderName("X-Protocol-Id"))
|
||||
.overrideIf("User-Agent", "okhttp/3.12.2")
|
||||
.overrideHeader("User-Agent", "okhttp/3.12.2")
|
||||
.build();
|
||||
|
||||
context = new RequestContext(new Request.Builder()
|
||||
|
||||
Reference in New Issue
Block a user