Java HttpurlConnection لا يتصل عندما أتصل Connect ()
-
23-09-2019 - |
سؤال
أحاول كتابة برنامج لإجراء اختبار تلقائي على الويب الخاص بي. لإنجاز هذا ، فتحت اتصال باستخدام 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
لمعرفة ما إذا كان قراءة أي شيء على الإطلاق يؤدي إلى احترام إعادة التوجيه).