java - 即使包含 User-Agent 属性,从 java 对网站的 GET 请求也会返回 403

标签 java get

因此,我尝试使用 GET 请求从 java 应用程序收集网站 ( https://search.torrents.io/ ) 的内容。

https://search.torrents.io/ 之后给出正确的 torrent infohash例如: https://search.torrents.io/1A1B3A4C80431A536A160FD94C2C13AFD38AF108将为我提供一些有关 torrent 的信息以及相应的 infohash(仅用于上下文,对问题并不重要)。

当从浏览器或 postman 发送 GET 请求时,网站返回响应 200,但从 java 应用程序查询网站似乎不起作用,我收到错误 403-forbidden:

Server returned HTTP response code: 403 for URL: https://search.torrents.io/1A1B3A4C80431A536A160FD94C2C13AFD38AF108

这是我的做法:

try {
        rss = new URL("https://search.torrents.io/" + infohash);

        httpconn = (HttpsURLConnection)rss.openConnection();

        httpconn.setRequestMethod  ("GET");
        httpconn.setRequestProperty("Content-Language", "en-US");
        httpconn.setRequestProperty("User-Agent",       "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36");

        httpconn.setRequestProperty("Host",     "search.torrents.io:443");
        httpconn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
        httpconn.setRequestProperty("Sec-Fetch-Dest",       "document");

        httpconn.setUseCaches(false);
        httpconn.setDoInput(true);
        httpconn.setDoOutput(true);

    } catch (Exception e) {
        return(TT.ERROR);
    }

    BufferedReader reader = null;

    try {
        reader = new BufferedReader(new InputStreamReader(rss.openStream()));
    } catch (Exception e) {
        return(TT.ERROR);
    }

现在一开始我没有向请求添加任何请求属性 - 收到 403 错误并发现我必须包含 User-agent 属性才能使其表现得像浏览器请求,但这不起作用任何一个。

然后我阅读了更多内容,有人建议我查看 chrome 的实时 http headers 插件,我基本上添加了所有预设的属性,并且似乎对请求有意义。

我还发现添加用户代理适用于许多其他网站,但不适用于此网站。看起来也很奇怪,它是从 postman 那里工作的,而 postman 也不是真正的浏览器。如果请求包含相同的 header ,那么它们不应该等于服务器吗?

有人知道如何解决这个问题吗? 非常感谢任何意见。

谢谢, 马蒂奇

最佳答案

感谢您的建议。

所以,我没有解决这个问题,问题可能是我正在查询的网站识别出查询来自默认的 java 库。我通过使用另一个库修复了它。

关于java - 即使包含 User-Agent 属性,从 java 对网站的 GET 请求也会返回 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60486724/

相关文章:

java - 从/登录重定向到/针对经过身份验证的用户

python - Flask 和 POST/GET 的问题

forms - 什么时候应该使用 GET 或 POST 方法?它们之间有什么区别?

javascript - 从以下模式中捕获字符串的正则表达式

java - CountDownTimer.cancel() 在 Android 中不起作用

java - 为什么从 java 调用 kotlin 对象时会得到一个奇怪的方法名称?

ruby - 通用 "HTTP GET html page content and recode to UTF-8"程序

java - Web 服务器如何填充 $_POST 和 $_GET?

Python 请求 - 通过 GET 传递参数

java - 如何正确地将带有 "join fetch"子句的 JPQL "where"表达为 JPA 2 CriteriaQuery?