迁移仓库

This commit is contained in:
2026-02-24 09:55:08 +08:00
parent 2d5c056b82
commit df6210aaf7
30 changed files with 1121 additions and 81 deletions

View File

@@ -0,0 +1,80 @@
//
// GDWebPageHookService.m
// DESThreeTest
//
// Created by Qwerdf on 2025/10/24.
// Copyright © 2025 zhang alan. All rights reserved.
//
#import "GDWebPageHookService.h"
@implementation GDWebPageHookService
#pragma mark -
- (instancetype)initWithSchemeTask:(id<WKURLSchemeTask>)task {
if (self = [super init]) {
_schemeTask = task;
}
return self;
}
#pragma mark - GDWebCustomURLSchemeProtocol
+ (BOOL)canService:(id<WKURLSchemeTask>)task {
// "/api/hook"
NSString *urlString = task.request.URL.absoluteString;
return [urlString containsString:@"/api/hook"];
}
- (void)startLoading:(void (^)(void))completion {
self.completion = completion;
NSURLRequest *request = self.schemeTask.request;
// 1.
self.dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
//
[self.schemeTask didFailWithError:error];
if (completion) completion();
return;
}
// 2. API
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSMutableDictionary *headers = [httpResponse.allHeaderFields mutableCopy];
//
headers[@"Access-Control-Allow-Origin"] = @"*";
// JSON
NSData *modifiedData = data;
if ([httpResponse.MIMEType containsString:@"application/json"] && data) {
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
if (json) {
json[@"_injected_by_native"] = @"true"; //
modifiedData = [NSJSONSerialization dataWithJSONObject:json options:0 error:nil];
}
}
// 3.
NSHTTPURLResponse *modifiedResponse = [[NSHTTPURLResponse alloc] initWithURL:httpResponse.URL
statusCode:httpResponse.statusCode
HTTPVersion:@"HTTP/1.1"
headerFields:headers];
[self.schemeTask didReceiveResponse:modifiedResponse];
[self.schemeTask didReceiveData:modifiedData];
[self.schemeTask didFinish];
//
if (completion) completion();
}];
[self.dataTask resume];
}
- (void)stopLoading {
//
[self.dataTask cancel];
self.dataTask = nil;
self.schemeTask = nil;
if (self.completion) self.completion();
}
@end