Я получаю «ошибку слишком большого количества перенаправлений» в более высоких android версиях API при использовании jsoup с android studio - PullRequest
0 голосов
/ 20 января 2020

Я изучаю jsoup с android studio. Я попробовал следующий код в intellij, и он работал нормально. Также он прекрасно работает в API Vesrion 19, но не для более высоких версий API.

    private TextView textView;
    private static final String TAG = "Main2Activity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        textView = findViewById(R.id.textView2);


        getWebsite();


    }


    private void getWebsite() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                final StringBuilder builder = new StringBuilder();

                try {
                    String url = "https://isa.ir/content/3895/";

                    Connection.Response response;

                    response = Jsoup.connect(url)
                            .followRedirects(true)
                            .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36 OPR/64.0.3417.150")
                            .execute();

                    Log.d(TAG, "run: " + response.statusCode());
                    Log.d(TAG, "run: " + response.headers().toString());


                        Document doc = response.parse();
                        final Elements text = doc.select(".yw_cnt div:nth-child(2)");
                        Log.d(TAG, "run: " + text.text());
                        for (Element link : text) {
                            builder.append(link.text());
                        }

                } catch (IOException e) {
                    builder.append("Error : ").append(e.getMessage()).append("\n");
                }

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        textView.setText(builder.toString());
                    }
                });
            }
        }).start();
    }
}

Я получаю ошибку слишком много перенаправлений.

Также ссылка https://isa.ir/content/3895/ превращается в https://isa.ir/content/3895/%D9%85%D8%A7%D9%87%D9%88%D8%A7%D8%B1%D9%87-%D8%B8%D9%81%D8%B1-%D8%A8%D9%87-%D8%B3%D8%A7%D8%B2%D9%85%D8%A7%D9%86-%D9%81%D8%B6%D8%A7%DB%8C%DB%8C-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86-%D8%AA%D8%AD%D9%88%DB%8C%D9%84-%D8%AF%D8%A7%D8%AF%D9%87-%D8%B4%D8%AF в браузере.

В Logcat во время тестирования я правильно получаю перенаправленный URL в API 19, но в более высоких API персидские символы превращаются в знаки вопроса, подобные этому https://isa.ir/content/3886/ ?????? ??. Я думаю, что проверил все, что связано с кодированием, но проблема все еще сохраняется.

Как я могу это исправить?

1 Ответ

0 голосов
/ 20 января 2020

Попробуйте перенаправить программно.

Установите followRedirects(false) и выполните его.

  1. Если код состояния ответа находится в диапазоне 301-307, прочитайте место перенаправления.
  2. Затем загрузите новый URL.

Делайте это до тех пор, пока код состояния ответа не будет в порядке.

Оформить заказ это пример

...