+1 امتیاز
قبل در برنامه نویسی توسط (7 امتیاز)
ویرایش شده قبل توسط

من برای دانلود فایل تو جاوا از کد پایین استفاده کردم. اما بعضی لینک ها رو جواب نمیده و وقتی وضعیت رو چاپ میکنم به من کد 302 رو میده. تا جایی که من فهیمدم باید لینک من رو مرورگر باز کنه و تبدیل به لینک اصلی کنه و لینک نهایی که فایل رو دانلود میکنه رو به من بده. (البته شک دارم درست فهمیده باشم) کسی از دوستان میدونه که چیکار باید بکنم؟ممنون میشم راهنمایی کنید.

Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {

                try {

                    URL url = new URL("my link");
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.connect();

                    InputStream stream = connection.getInputStream();
                    Log.i("Log", "size: " + connection.getContentLength());
                    Log.i("Log", "code: " + connection.getResponseCode());

                    FileOutputStream output = new FileOutputStream(Base.path + "file.zip");

                    byte[] buffer = new byte[8 * 1024];
                    int len;

                    while ((len = stream.read(buffer)) != -1) {
                        output.write(buffer, 0, len);
                    }
                    stream.close();
                    output.close();

                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();

1 پاسخ

0 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

http status code 302 جزء Redirection status ها است و بمعنی این است که برای رسیدن یه محتوای اصلی باید یک Redirection در سمت کلاینت (برای مثال در مرورگر) اتفاق بیوفتد.

شما از لایبرری HttpURLConnection استفاده می کنید که باید برای مدیریت Redirection ها این کار را بصورت دستی انجام دهید. بدین صورت که پس از دریافت پاسخ http در صورتی که ResponseCode برابر 302 یا 301 بود، redirect url را از هدر پاسخ گرفته و یک درخواست جدید بسازید:

	int status = conn.getResponseCode();

	if (status != HttpURLConnection.HTTP_OK) {
		if (status == HttpURLConnection.HTTP_MOVED_TEMP
			|| status == HttpURLConnection.HTTP_MOVED_PERM
				|| status == HttpURLConnection.HTTP_SEE_OTHER)
		
		// get redirect url from "location" header field
		String newUrl = conn.getHeaderField("Location");

		// open the new connnection again
		conn = (HttpURLConnection) new URL(newUrl).openConnection();
	}
.
.
.
قبل توسط (7 امتیاز)
خیلی ممنونم جناب زرین فام. قبل از کد شما این موضوع رو فهمیدم و فقط برای کد 302 رفتم. اما با کد شما برای همه ی Redirection status ها این موضوع حل شد. متشکرم و ممنون از وقتتی که گذاشتید.

سوالات مشابه

0 امتیاز
1 پاسخ 326 بازدید
0 امتیاز
1 پاسخ 8.2هزار بازدید
0 امتیاز
1 پاسخ 266 بازدید
0 امتیاز
1 پاسخ 1.2هزار بازدید
0 امتیاز
0 پاسخ 305 بازدید
...