package com.imyeyu.network; import com.imyeyu.io.IO; import org.apache.hc.client5.http.fluent.Request; import org.apache.hc.core5.http.Header; import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.HttpResponse; import org.apache.hc.core5.http.ProtocolException; import javax.naming.NoPermissionException; import java.io.File; import java.io.IOException; import java.nio.file.Path; /** * * @author 夜雨 * @since 2025-06-26 13:03 */ public class FileRequest extends JacksonRequest { protected FileRequest(Request request) { super(request); } public static FileRequest wrap(Request request) { return new FileRequest(request); } public static FileRequest get(String url) { return new FileRequest(Request.get(url)); } public static FileRequest post(String url) { return new FileRequest(Request.post(url)); } @Override public FileRequest timeout(long ms) { super.timeout(ms); return this; } @Override public FileRequest header(String key, String value) { request.addHeader(key, value); return this; } @Override public FileRequest token(String token) { request.addHeader("Token", token); return this; } @Override public FileRequest language(String langHeader) { request.addHeader("Accept-Language", langHeader); return this; } @Override public FileRequest body(Object object) { super.body(object); return this; } @Override public FileRequest bodyEntity(HttpEntity entity) { super.bodyEntity(entity); return this; } public void toFile(String path, String fileName) throws IOException, NoPermissionException { toFile(new File(IO.fitPath(path) + fileName)); } public void toFile(Path outputPath) throws IOException, NoPermissionException { toFile(outputPath.toFile()); } public void toFile(File file) throws IOException, NoPermissionException { IO.toFile(file, asBytes()); } public long length() throws IOException, ProtocolException { HttpResponse response = request.execute().returnResponse(); final int status = response.getCode(); if (status < 200 || 300 <= status) { throw new IOException("HTTP error status: " + status); } final Header contentLengthHeader = response.getHeader("Content-Length"); if (contentLengthHeader == null) { throw new IOException("Content-Length header missing"); } return Long.parseLong(contentLengthHeader.getValue()); } }