无法使用 Jsoup 获取页面
Can't get the page using Jsoup
当它尝试在正常 java class 中寻呼时出现问题,一切正常,但如果已经在 android 应用程序中完成,答案就会出现 "you don't have permission to access" 虽然在 android 清单中指定了用户代理具有使用互联网的权限,并且所有这些都在一个单独的线程中,有人会遇到这个问题吗
public void onClick(View view)
{
new Thread(new Runnable() {
@Override
public void run()
{
go();
}
}).start();
}
private void go()
{
try {
document = Jsoup.connect("http://issa.beltelecom.by/main.html").userAgent("Chrome 53.0.2785.143").ignoreHttpErrors(true).get();
} catch (IOException e) {
e.printStackTrace();
}
}
你可以试试这个,设置你的OnClickListener来调用后台任务。
new MyAsyncTask().execute();
然后执行你的任务
private class MyAsyncTask extends AsyncTask<Void, Void, Boolean> {
protected void onPreExecute() {
super.onPreExecute();
//do anything here
}
protected Boolean doInBackground(Void...param) {
Document document = null;
try {
document = Jsoup.connect(getString(R.string.your_url_string)).get();
} catch (IOException e) {
e.printStackTrace();
}
if (document != null) {
Elements yourElements = document.select("#element_id");
//Do anything here
return true;
}
//Document is null
return false;
}
protected void onPostExecute(Boolean result) {
if(result==true) {
// do this
}
}
}
设置Accept
header字段似乎很重要(注意:在Android 5.1.1设备上测试)。
通常:如果使用 jsoup 拒绝连接,请检查请求(例如使用 chrome dev tools/F12 中的网络选项卡)并添加缺失的 header 字段。
示例代码
String userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36";
String url = "https://issa.beltelecom.by/main.html";
String acceptValue = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
String host = "issa.beltelecom.by";
document = Jsoup.connect(url).header("Accept",acceptValue).header("Host", host).userAgent(userAgent).get();
当它尝试在正常 java class 中寻呼时出现问题,一切正常,但如果已经在 android 应用程序中完成,答案就会出现 "you don't have permission to access" 虽然在 android 清单中指定了用户代理具有使用互联网的权限,并且所有这些都在一个单独的线程中,有人会遇到这个问题吗
public void onClick(View view)
{
new Thread(new Runnable() {
@Override
public void run()
{
go();
}
}).start();
}
private void go()
{
try {
document = Jsoup.connect("http://issa.beltelecom.by/main.html").userAgent("Chrome 53.0.2785.143").ignoreHttpErrors(true).get();
} catch (IOException e) {
e.printStackTrace();
}
}
你可以试试这个,设置你的OnClickListener来调用后台任务。
new MyAsyncTask().execute();
然后执行你的任务
private class MyAsyncTask extends AsyncTask<Void, Void, Boolean> {
protected void onPreExecute() {
super.onPreExecute();
//do anything here
}
protected Boolean doInBackground(Void...param) {
Document document = null;
try {
document = Jsoup.connect(getString(R.string.your_url_string)).get();
} catch (IOException e) {
e.printStackTrace();
}
if (document != null) {
Elements yourElements = document.select("#element_id");
//Do anything here
return true;
}
//Document is null
return false;
}
protected void onPostExecute(Boolean result) {
if(result==true) {
// do this
}
}
}
设置Accept
header字段似乎很重要(注意:在Android 5.1.1设备上测试)。
通常:如果使用 jsoup 拒绝连接,请检查请求(例如使用 chrome dev tools/F12 中的网络选项卡)并添加缺失的 header 字段。
示例代码
String userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36";
String url = "https://issa.beltelecom.by/main.html";
String acceptValue = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
String host = "issa.beltelecom.by";
document = Jsoup.connect(url).header("Accept",acceptValue).header("Host", host).userAgent(userAgent).get();