This commit is contained in:
Looly 2022-09-30 19:38:55 +08:00
parent 665ba76f98
commit bfdc1ecbda
2 changed files with 36 additions and 7 deletions

View File

@ -8,7 +8,6 @@ import cn.hutool.core.io.resource.FileResource;
import cn.hutool.core.io.resource.MultiFileResource;
import cn.hutool.core.io.resource.Resource;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Console;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.map.TableMap;
import cn.hutool.core.net.ssl.SSLUtil;
@ -818,11 +817,28 @@ public class HttpRequest extends HttpBase<HttpRequest> {
* 设置是否打开重定向如果打开默认重定向次数为2<br>
* 此方法效果与{@link #setMaxRedirectCount(int)} 一致
*
* <p>
* 需要注意的是当设置为{@code true}如果全局重定向次数非0直接复用否则设置默认2次<br>
* 当设置为{@code false}无论全局是否设置次数都设置为0<br>
* 不调用此方法的情况下使用全局默认的次数
* </p>
*
* @param isFollowRedirects 是否打开重定向
* @return this
*/
public HttpRequest setFollowRedirects(final boolean isFollowRedirects) {
return setMaxRedirectCount(isFollowRedirects ? 2 : 0);
if (isFollowRedirects) {
if (config.maxRedirectCount <= 0) {
// 默认两次跳转
return setMaxRedirectCount(2);
}
} else {
// 手动强制关闭重定向此时不受全局重定向设置影响
if (config.maxRedirectCount < 0) {
return setMaxRedirectCount(0);
}
}
return this;
}
/**
@ -1242,7 +1258,6 @@ public class HttpRequest extends HttpBase<HttpRequest> {
redirectUrl = UrlBuilder.ofHttpWithoutEncode(location);
}
Console.log(redirectUrl);
setUrl(redirectUrl);
if (redirectCount < config.maxRedirectCount) {
redirectCount++;

View File

@ -9,6 +9,9 @@ import org.junit.Ignore;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.UUID;
/**
@ -188,4 +191,15 @@ public class DownloadTest {
FileUtil.del(file1);
}
}
@Test
//@Ignore
public void downloadTeamViewerTest() throws IOException {
// 此URL有3次重定向, 需要请求4次
final String url = "https://download.teamviewer.com/download/TeamViewer_Setup_x64.exe";
HttpGlobalConfig.setMaxRedirectCount(20);
final Path temp = Files.createTempFile("tmp", ".exe");
final File file = HttpUtil.downloadFileFromUrl(url, temp.toFile());
Console.log(file.length());
}
}