30/09/2018, 18:43

Lỗi ProtocolException : Too many REDIRECTS từ 1 URL trong Java

Em đang làm app đọc báo online

Em có mấy trang như VNE, Dantri, …Soha, Kenh14

với các trang VNE , Dantri thì với rss họ cung cấp, em lấy về dữ liệu rất ngon lành. Nhưng cùng thao tác ấy, với link rss của Soha thì luôn bị lỗi ?

Lỗi hiện ra là ProtocolException : Too mnay REDIRECTS. Đây là lỗi của code mình hay của server ạ ? VÀ AI GẶP RỒI THÌ CÓ CÁCH FIX KHÔNG Ạ. STACKOVERFLOWS e tìm mãi mà chưa ra kết quả

caybang viết 20:55 ngày 30/09/2018

bẹn show log error cho mình xem đc không. ?
thực ra lấy về rồi là ok rồi, chỉ còn phần client bạn code ntn mới lỗi thôi bạn à.

Điệp viết 20:48 ngày 30/09/2018

tức là với link rss của VNE hay Dantri thì đoạn code có thể get về ngon lành, cơ mà rss của soha hay kenh14 thì không get được

Điệp viết 20:46 ngày 30/09/2018

Kiểu như nó chỉ cho máy được phép mới lấy được về hay sao ấy @@

caybang viết 20:52 ngày 30/09/2018

bạn có ghi log nội dung lấy về là gì được chưa? chỉ là cái links nếu họ đã cung cấp cho dev RSS thì bạn sẽ lấy được.

Điệp viết 20:53 ngày 30/09/2018

url = new URL(link);
file = new File(Environment.getExternalStorageDirectory(), “soha.xml”);
outputStream = new FileOutputStream(file);
HttpURLConnection HttpConnect = (HttpURLConnection) url.openConnection();
HttpConnect.connect();
reader = new BufferedReader(new InputStreamReader(HttpConnect.getInputStream()));
while ((data=reader.readLine())!=null)
{ x= x+data;
outputStream.write(data.getBytes());
}
reader.close();
outputStream.close();

đoạn code trên thì không sao VỚI CÁC LINK RSS CỦA VNE, DANTRI, nhưng chỉ cần LÀ LINK TỪ KENH14 HAY SOHA THÌ dòng reader = new … thì sẽ BỊ LỖI VÀ force stop ngay. Kiểu không getInputStream được từ link đó

Điệp viết 20:59 ngày 30/09/2018

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.RuntimeException: Can’t create handler inside thread that has not called Looper.prepare()
at android.os.Handler.(Handler.java:121)
at android.widget.Toast$TN.(Toast.java:322)
at android.widget.Toast.(Toast.java:91)
at android.widget.Toast.makeText(Toast.java:238)
at com.example.diep_chelsea.httprequest.SohaActivity$MyLoader.doInBackground(SohaActivity.java:158)
at com.example.diep_chelsea.httprequest.SohaActivity$MyLoader.doInBackground(SohaActivity.java:133)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
11-08 23:33:39.819 1040-1040/com.example.diep_chelsea.httprequest W/EGL_genymotion﹕ eglSurfaceAttrib not implemented

Thành Phạm viết 20:53 ngày 30/09/2018

Chắc họ không làm gì để chặn đâu vì mình thử với các trình đọc rss khác đều ổn mà nếu cần chặn thì họ chỉ việc bỏ chức năng rss đi là xong, việc gì phải rắc rồi thế

X viết 20:56 ngày 30/09/2018

Thử xem, tự sửa lại nhé

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("your url");
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new BufferedHttpEntity(entity).getContent()));

StringBuilder result = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
	result.append(line + "\n");
}
return result.toString();
Điệp viết 20:47 ngày 30/09/2018

vì em đọc các trang khâc đều ổn. Riêng với Soha và Kenh14 có app đọc tin thì không lấy ra được

Điệp viết 20:56 ngày 30/09/2018

Bác ơi. API 4.0 không dùng DefaultHttp :v

X viết 20:56 ngày 30/09/2018

Dùng thư viện cho nhanh

Điệp viết 20:47 ngày 30/09/2018

Lên giúp em với. huhuhu

Bài liên quan
0