سؤال

أحاول كتابة برنامج لإجراء اختبار تلقائي على الويب الخاص بي. لإنجاز هذا ، فتحت اتصال باستخدام httpurlconnection.

إحدى الصفحات التي أحاول اختبارها تؤدي إعادة توجيه 302. رمز الاختبار الخاص بي يشبه هذا:

URL currentUrl = new URL(urlToSend);
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection();
connection.connect();
system.out.println(connection.getURL().toString());

لذلك ، دعنا نقول أن urltosend هو http://www.foo.com/bar.jsp, ، وأن هذه الصفحة تعيد توجيهك إلى http://www.foo.com/quux.jsp. يجب طباعة بيان println الخاص بي http://www.foo.com/quux.jsp, ، حق؟

خاطئ.

لا يحدث إعادة التوجيه أبدًا ، وهو يطبع عنوان URL الأصلي. ومع ذلك ، إذا قمت بتغيير تبديل خط الاتصال.

URL currentUrl = new URL(urlToSend);
HttpURLConnection connection = (HttpURLConnection) currentUrl.openConnection();
//connection.connect();
connection.getResponseCode();
system.out.println(connection.getURL().toString());

لماذا أرى هذا السلوك؟ أفعل أي شيء خطأ؟

شكرا للمساعدة.

هل كانت مفيدة؟

المحلول

ال connect() الطريقة فقط تخلق اتصال. عليك أن ترتكب الطلب (عن طريق الاتصال getInputStream(), getResponseCode(), ، أو getResponseMessage()) حتى يتم إرجاع الاستجابة ومعالجتها.

نصائح أخرى

ال الاتصال() يتم تنفيذ الطريقة في فئة urlconnection ، ولا يتم تجاوزها بواسطة httpurlconnection صف دراسي.

فئة urlconnection ليست على دراية بـ HTTP ، وبالتالي يجب ألا تتبع إعادة توجيه HTTP حتى لو كانت تخلق اتصالًا حقيقيًا.

إذا كنت تريد سلوكًا جوهريًا لبروتوكول HTTP ، فربما تريد التمسك بالطرق التي تم تنفيذها في فئة httpurlconnection ، كما طريقة getResponsecode ().

أضف ما يلي في oncreate الخاص بك

StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); 

لماذا لا تستخدم httpclient من أباتشي.

محاولة setFollowRevirects, ، كما قد يساعد. في الواقع ، حاول getFollowRedirects لمعرفة ما إذا كانت هذه هي المشكلة ، أولاً (من غير المحتمل لأنها صحيحة بشكل افتراضي).

تعديل: إذا لم تكن هذه مشكلتك ، فسأحاول قراءة شيء من الاتصال (كما تفعل مع getResponseCode لكنني سأحاول أيضا getHeaderField لمعرفة ما إذا كان قراءة أي شيء على الإطلاق يؤدي إلى احترام إعادة التوجيه).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top