微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ResponseCode 返回 200 但在 openStream 时得到错误 401

如何解决ResponseCode 返回 200 但在 openStream 时得到错误 401

当我调用这个方法时,它不起作用。我不知道为什么,但是 ResponseCode 是 200,但是当我尝试获取 html 代码时,我收到错误 401。

控制台显示如下:

RespondeCode:200
java.io.IOException: Server returned HTTP response code: 401 for URL: https://www.themoviedb.org/tv/12971/season/1/episode/1/edit?active_nav_item=primary_facts
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1913)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:245)
    at java.base/java.net.URL.openStream(URL.java:1117)
    at PrincipalProgram.getEpisodePage(PrincipalProgram.java:84)
    at PrincipalProgram.main(PrincipalProgram.java:36)

你知道为什么我的 curl 不起作用吗? 作为预防措施,我用 MY_COOKIES 替换了 cookie。

public static void getEpisodePage(TMDB tmdb) {

    URL url;
    HttpURLConnection http = null;

    try {

        url = new URL("https://www.themoviedb.org/tv/12971/season/1/episode/1/edit?active_nav_item=primary_facts");
        http = (HttpURLConnection) url.openConnection();
        http.setRequestProperty("authority","www.themoviedb.org");
        http.setRequestProperty("pragma","no-cache");
        http.setRequestProperty("cache-control","no-cache");
        http.setRequestProperty("sec-ch-ua","\" Not;A Brand\";v=\"99\",\"Google Chrome\";v=\"91\",\"Chromium\";v=\"91\"");
        http.setRequestProperty("sec-ch-ua-mobile","?0");
        http.setRequestProperty("upgrade-insecure-requests","1");
        http.setRequestProperty("user-agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/91.0.4472.124 Safari/537.36");
        http.setRequestProperty("accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
        http.setRequestProperty("sec-fetch-site","same-origin");
        http.setRequestProperty("sec-fetch-mode","navigate");
        http.setRequestProperty("sec-fetch-user","?1");
        http.setRequestProperty("sec-fetch-dest","document");
        http.setRequestProperty("referer","https://www.themoviedb.org/tv/12971/season/1/episode/1");
        http.setRequestProperty("accept-language","fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,el;q=0.6");
        http.setRequestProperty("cookie","tmdb.prefs=MY_COOKIES");


        System.out.println("RespondeCode:" + http.getResponseCode());

        InputStream in = url.openStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        StringBuilder result = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            result.append(line);
        }

        Document doc = Jsoup.parse(result.toString());
        System.out.println("test: " + doc.select("#production_code").html());

    } catch (Exception e) {
        e.printstacktrace();
    } finally {
        http.disconnect();
    }

}

这是 curl 命令。该命令有效:

curl 'https://www.themoviedb.org/tv/12971/season/1/episode/3/edit?active_nav_item=primary_facts' \
  -H 'authority: www.themoviedb.org' \
  -H 'pragma: no-cache' \
  -H 'cache-control: no-cache' \
  -H 'sec-ch-ua: " Not;A Brand";v="99","Google Chrome";v="91","Chromium";v="91"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'upgrade-insecure-requests: 1' \
  -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/91.0.4472.124 Safari/537.36' \
  -H 'accept: text/html,application/signed-exchange;v=b3;q=0.9' \
  -H 'sec-fetch-site: same-origin' \
  -H 'sec-fetch-mode: navigate' \
  -H 'sec-fetch-user: ?1' \
  -H 'sec-fetch-dest: document' \
  -H 'referer: https://www.themoviedb.org/tv/12971/episode_group/6057a4fae16e5a005414becb/group/6057a5252ac49900756e7bc3/episode/52b25cc119c2952e49101d1d' \
  -H 'accept-language: fr-FR,el;q=0.6' \
  -H 'cookie: tmdb.prefs=MY_COOKIES' \
  --compressed

非常感谢

解决方法

糟糕,我写的

InputStream in = url.openStream();

代替

InputStream in = http.getInputStream();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。