gpt4 book ai didi

java - 获取非常具体的 URL 的重定向 URL(Java 中)

转载 作者:行者123 更新时间:2023-12-01 13:40:56 26 4
gpt4 key购买 nike

如何获取 http://at.atwola.com/?adlink/5113/1649059/0/2018/AdId=4041444;BnId=872;itime=15692006;impref=13880156912668385284 的重定向 URL ;在Java 中?

我的代码(如下所示)是根据堆栈溢出上类似问题的答案构建的(特别是 https://stackoverflow.com/a/5270162/1382251)。

但它只是产生原始 URL。我怀疑还有其他类似的情况,所以我想具体解决这个问题并使用一般的解决方案。

    String ref = "http://at.atwola.com/?adlink/5113/1649059/0/2018/AdId=4041444;BnId=872;itime=15692006;impref=13880156912668385284;";
try
{
URLConnection con1 = new URL(ref).openConnection();
con1.connect();
InputStream is = con1.getInputStream();
URL url = con1.getURL();
is.close();
String finalPage = url.toString();
if (finalPage.equals(ref))
{
HttpURLConnection con2 = (HttpURLConnection)con1;
con2.setInstanceFollowRedirects(false);
con2.connect();
if (con2.getResponseCode()/100 == 3)
finalPage = con2.getHeaderField("Location");
}
System.out.println(finalPage);
}
catch (Exception error)
{
System.out.println("error");
}

最佳答案

我用 telnet、wget 和curl 对您的 URL 进行了一些操作,我注意到在某些情况下服务器会返回响应 200 OK,有时会返回 302 Moved Temporarily 。主要区别似乎是请求用户代理 header 。如果您在 con1.connect() 之前添加以下内容,您的代码就可以工作:

con1.setRequestProperty("User-Agent","");

也就是说,如果用户代理为空(或者 header 根本不存在),服务器会发出重定向。使用Java用户代理(在我的例子中用户代理:Java/1.7.0_45)和默认的curl用户代理(用户代理:curl/7.32.0) code>) 服务器响应 200 OK。

在某些情况下,您可能还需要设置:

System.setProperty("http.agent", "");

参见Setting user agent of a java URLConnection

运行该网站的服务器是 Adtech Adserver,显然它正在执行 user agent sniffing 。有一个long history of user agent sniffing 。所以看来最安全的做法是将用户代理设置为 Mozilla:

con1.setRequestProperty("User-Agent","Mozilla"); //works with your code for your URL

也许最安全的选择是使用一些流行的网络浏览器使用的用户代理。

关于java - 获取非常具体的 URL 的重定向 URL(Java 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20783742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com