كيف يمكنني تسجيل الدخول وتنزيل ملف من صفحة ويب https من Java؟

StackOverflow https://stackoverflow.com/questions/421251

  •  05-07-2019
  •  | 
  •  

سؤال

لا بد لي من تسجيل الدخول إلى صفحة ويب https وتنزيل ملف باستخدام Java.أعرف جميع عناوين URL مسبقًا:

baseURL = // a https URL;
urlMap = new HashMap<String, URL>();
urlMap.put("login", new URL(baseURL, "exec.asp?login=username&pass=XPTO"));
urlMap.put("logout", new URL(baseURL, "exec.asp?exec.asp?page=999"));
urlMap.put("file", new URL(baseURL, "exec.asp?file=111"));

إذا جربت كل هذه الروابط في متصفح ويب مثل فايرفوكس، فإنها تعمل.

الآن عندما أفعل:

urlConnection = urlMap.get("login").openConnection();
urlConnection.connect();
BufferedReader in = new BufferedReader(
    new InputStreamReader(urlConnection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
    System.out.println(inputLine);
in.close();

لقد استعدت للتو صفحة تسجيل الدخول بتنسيق HTML مرة أخرى، ولا أستطيع متابعة تنزيل الملف.

شكرًا!

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

المحلول

وأنا أتفق مع Alnitak أن المشكلة ومن المرجح تخزين والكوكيز العودة.

وثمة خيار آخر جيد ولقد استخدمت هو HttpClient وإصلاحه من جاكرتا العموم.

ومن الجدير بالذكر، بوصفها جانبا، أنه إذا كان هذا هو خادم يمكنك التحكم، يجب عليك أن تدرك أن إرسال اسم المستخدم وكلمة المرور كما querystrings غير آمن (حتى إذا كنت تستخدم HTTPS). HttpClient وإصلاحه يدعم إرسال المعلمات باستخدام وظيفة، والتي يجب النظر فيها.

نصائح أخرى

وكما لوحظ، يجب أن تحتفظ ملف تعريف ارتباط جلسة بين طلبات (انظر <لأ href = "http://java.sun.com/javase/6/docs/api/java/net/CookieHandler.html" يختلط = "noreferrer نوفولو"> CookieHandler ).

وهنا هو تطبيق نموذج:

class MyCookieHandler extends CookieHandler {

    private Map<String, List<String>> cookies = new HashMap<String, List<String>>();

    @Override
    public Map<String, List<String>> get(URI uri,
            Map<String, List<String>> requestHeaders) throws IOException {
        String host = uri.getHost();
        Map<String, List<String>> ret = new HashMap<String, List<String>>();
        synchronized (cookies) {
            List<String> store = cookies.get(host);
            if (store != null) {
                store = Collections.unmodifiableList(store);
                ret.put("Cookie", store);
            }
        }

        return Collections.unmodifiableMap(ret);
    }

    @Override
    public void put(URI uri, Map<String, List<String>> responseHeaders)
            throws IOException {
        List<String> newCookies = responseHeaders.get("Set-Cookie");
        if (newCookies != null) {
            String host = uri.getHost();
            synchronized (cookies) {
                List<String> store = cookies.get(host);
                if (store == null) {
                    store = new ArrayList<String>();
                    cookies.put(host, store);
                }
                store.addAll(newCookies);
            }
        }
    }

}

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

وذلك لأن HTTP نفسه عديم الجنسية، وذلك في القانون الحالي الخاص بك وليس هناك طريقة لالملقم البعيد لنقول أن الطلب التحميل الثاني من نفس المستخدم الذي بتسجيل الدخول فقط في.

أود أن أقول إلقاء نظرة على Java CURL http://sourceforge.net/projects/javacurl.لقد استخدمته من قبل لتسجيل الدخول إلى موقع ويب https وتنزيل الأشياء، وهو يحتوي على ميزات مثل انتحال معرف المتصفح وما إلى ذلك.مما قد يحل مشكلة إعادة توجيهك مرة أخرى لتسجيل الدخول.

على الرغم من أنهم يوفرون مكونًا إضافيًا لـ Eclipse له، فقد استخدمته بدونه وهو يعمل بشكل جيد.

وبدلاً من ذلك يمكنك استخدام wget واستدعائه من java.

وربما كنت ترغب في محاولة HttpUnit . على الرغم من أن كتب مع اختبار من المواقع في الاعتبار أنه قد تكون قابلة للاستخدام لمشكلتك.

ومن موقعه على الانترنت:

و"... مكتوب بلغة جافا، HttpUnit يحاكي الأجزاء ذات الصلة من السلوك المتصفح، بما في ذلك تقديم النموذج، وجافا سكريبت، ومصادقة HTTP الأساسية والكعك وإعادة توجيه الصفحة التلقائي، ويسمح رمز اختبار جافا لفحص الصفحات عاد إما نص، XML DOM، أو حاويات من الأشكال، والجداول، وصلات ".

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