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

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

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

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

0 رأی
1 جواب میانگین بازدید روزانه 0.19239 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.0789 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 3.745,131 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.11100 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.46139 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.2173 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.1981 بازدید
+1 رأی
0 جواب میانگین بازدید روزانه 0.59274 بازدید
کانال تلگرام جواب یاب
...