دانلود فایل هایی با کد پاسخ http 302 با استفاده از HttpURLConnection در جاوا

+1 رأی
میانگین بازدید روزانه 0.1865 بازدید

من برای دانلود فایل تو جاوا از کد پایین استفاده کردم. اما بعضی لینک ها رو جواب نمیده و وقتی وضعیت رو چاپ میکنم به من کد 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();
سوال 11 ماه قبل در تالار برنامه نویسی توسط kambiz moradi_962394 (7 امتیاز)
ویرایش 11 ماه قبل توسط Saeed Zarinfam

1 جواب

0 رأی
 
بهترین جواب

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();
	}
.
.
.
جواب 11 ماه قبل توسط Saeed Zarinfam (1,310 امتیاز)
انتخاب شده در 11 ماه قبل توسط kambiz moradi_962394
خیلی ممنونم جناب زرین فام. قبل از کد شما این موضوع رو فهمیدم و فقط برای کد 302 رفتم. اما با کد شما برای همه ی Redirection status ها این موضوع حل شد. متشکرم و ممنون از وقتتی که گذاشتید.

سوال های مشابه

0 رأی
1 جواب میانگین بازدید روزانه 0.18206 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.0779 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 3.454,226 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.1183 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.3350 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.1836 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.2365 بازدید
+1 رأی
0 جواب میانگین بازدید روزانه 0.47149 بازدید
کانال تلگرام جواب یاب
...