我正在用android studio学习jsoup。我在 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 中,我在 API 19 中正确获取了重定向的 URL,但在更高的 API 中,波斯字符会变成这样的问号 https://isa.ir/content/3886/????????. 我想我测试了与编码相关的所有内容,但问题仍然存在。
我该如何解决这个问题?
尝试以编程方式重定向。
设置followRedirects(false)
并执行它。
- 如果响应状态代码介于 301-307 之间,请阅读重定向位置。
- 然后加载新的网址。
执行此步骤,直到响应状态代码为"正常"。
查看此示例