diff --git a/src/main/java/com/ets/scraper/EtsScraper.java b/src/main/java/com/ets/scraper/EtsScraper.java index b8f2404..5012e2c 100644 --- a/src/main/java/com/ets/scraper/EtsScraper.java +++ b/src/main/java/com/ets/scraper/EtsScraper.java @@ -431,7 +431,7 @@ public class EtsScraper { } public static void autoImportBill(Path filePath) { - String token = proxyLogin(); + String token = proxyLogin(PROXY_HOST, USERNAME, PASSWORD); if (token == null) { System.out.println("[-] Proxy login failed, skipping import"); return; @@ -439,16 +439,16 @@ public class EtsScraper { proxyImport(filePath, token); } - public static String proxyLogin() { + public static String proxyLogin(String proxyHost, String username, String password) { try { - String loginUrl = PROXY_HOST + "/api/auth/login?username=" + USERNAME + "&password=" + PASSWORD; + String loginUrl = proxyHost + "/api/auth/login?username=" + username + "&password=" + password; java.net.URI uri = java.net.URI.create(loginUrl); java.net.http.HttpClient client = java.net.http.HttpClient.newBuilder() .connectTimeout(java.time.Duration.ofSeconds(10)) .build(); java.net.http.HttpRequest request = java.net.http.HttpRequest.newBuilder() .uri(uri) - .GET() + .POST(java.net.http.HttpRequest.BodyPublishers.noBody()) .header("Content-Type", "application/json") .build(); java.net.http.HttpResponse response = client.send(request, java.net.http.HttpResponse.BodyHandlers.ofString()); diff --git a/src/test/java/com/ets/scraper/ImportTest.java b/src/test/java/com/ets/scraper/ImportTest.java index 9a64f21..b91e821 100644 --- a/src/test/java/com/ets/scraper/ImportTest.java +++ b/src/test/java/com/ets/scraper/ImportTest.java @@ -4,12 +4,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import java.io.File; -import java.io.FileInputStream; -import java.io.OutputStream; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; import java.nio.file.Path; import static org.junit.jupiter.api.Assertions.*; @@ -34,77 +28,9 @@ class ImportTest { } assertTrue(testFile.exists(), "Test file must exist"); - String token = proxyLogin(testFile); + String token = EtsScraper.proxyLogin(PROXY_HOST, USERNAME, PASSWORD); assertNotNull(token); - String result = proxyImport(testFile, token); - assertNotNull(result); - System.out.println("[+] Import result: " + result); - assertTrue(result.contains("\"code\""), "Response should contain code field"); - } - - private String proxyLogin(File testFile) throws Exception { - String loginUrl = PROXY_HOST + "/api/auth/login?username=" + USERNAME + "&password=" + PASSWORD; - HttpClient client = HttpClient.newBuilder() - .connectTimeout(java.time.Duration.ofSeconds(10)) - .build(); - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(loginUrl)) - .POST(HttpRequest.BodyPublishers.noBody()) - .header("Content-Type", "application/json") - .build(); - HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - String body = response.body(); - System.out.println("[+] Login response: " + body); - - int tokenIdx = body.indexOf("\"accessToken\""); - if (tokenIdx < 0) { - throw new AssertionError("No accessToken in login response: " + body); - } - int colonStart = body.indexOf("\":", tokenIdx); - int quoteStart = body.indexOf("\"", colonStart + 2); - int quoteEnd = body.indexOf("\"", quoteStart + 1); - return body.substring(quoteStart + 1, quoteEnd); - } - - private String proxyImport(File file, String token) throws Exception { - String boundary = "----FormBoundary" + System.currentTimeMillis(); - String boundaryLine = "--" + boundary; - java.io.ByteArrayOutputStream out = new java.io.ByteArrayOutputStream(); - OutputStream os = out; - - os.write((boundaryLine + "\r\n").getBytes()); - os.write(("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"\r\n").getBytes()); - os.write("Content-Type: application/octet-stream\r\n\r\n".getBytes()); - os.flush(); - - try (FileInputStream fis = new FileInputStream(file)) { - byte[] buf = new byte[8192]; - int n; - while ((n = fis.read(buf)) > 0) { - os.write(buf, 0, n); - } - } - os.flush(); - - os.write(("\r\n" + boundaryLine + "--\r\n").getBytes()); - os.flush(); - - byte[] entityBytes = out.toByteArray(); - - HttpClient client = HttpClient.newBuilder() - .connectTimeout(java.time.Duration.ofSeconds(60)) - .build(); - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(PROXY_HOST + "/api/bill/import")) - .header("Content-Type", "multipart/form-data; boundary=" + boundary) - .header("authorization", token) - .POST(HttpRequest.BodyPublishers.ofByteArray(entityBytes)) - .build(); - - HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - System.out.println("[+] Import response (" + response.statusCode() + "): " + response.body()); - assertEquals(200, response.statusCode(), "Import request should succeed"); - return response.body(); + EtsScraper.proxyImport(testFile.toPath(), token); } }