سؤال

أنا أتحقق من الفصل org.apache.http.auth. أي مرجع أو مثال آخر إذا كان لدى أي شخص؟

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

المحلول

لم أقابل هذه الحزمة المعينة من قبل ، لكنها تقول إنها مخصصة لمصادقة HTTP من جانب العميل ، والتي تمكنت من القيام بها على Android باستخدام java.net واجهات برمجة التطبيقات ، مثل ذلك:

Authenticator.setDefault(new Authenticator(){
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("myuser","mypass".toCharArray());
    }});
HttpURLConnection c = (HttpURLConnection) new URL(url).openConnection();
c.setUseCaches(false);
c.connect();

من الواضح أن getPasswordauthentication () يجب أن تفعل شيئًا أكثر ذكاءً من إعادة ثابت.

إذا كنت تحاول تقديم طلب بجسم (على سبيل المثال POST) مع المصادقة ، حذار من Android الإصدار 4326. لقد قمت بربط الإصلاح المقترح بالمنصة هناك ، ولكن هناك حل بسيط إذا كنت تريد فقط المصادقة الأساسية: لا تهتم بالمصادقة ، وبدلاً من ذلك قم بذلك:

c.setRequestProperty("Authorization", "basic " +
        Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));

نصائح أخرى

بالنسبة لي ، لقد نجحت ،

final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP);

Apache httpclient:

request.setHeader("Authorization", basicAuth);

httpurlconnection:

connection.setRequestProperty ("Authorization", basicAuth);

يمكنك إدخال رأس HTTP يدويًا لطلب:

HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));

تعمل الطريقة اليدوية بشكل جيد مع الاستيراد Android.Util.base64 ، ولكن تأكد من تعيين BASE64.NO_WRAP على تشفير الاتصال:

String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);

لمشاريع Android الخاصة بي ، استخدمت مكتبة Base64 من هنا:

http://iharder.net/base64

إنها مكتبة واسعة للغاية وحتى الآن لم أواجه أي مشاكل معها.

هذا يعمل بالنسبة لي

 URL imageUrl = new URL(url);
                    HttpURLConnection conn = (HttpURLConnection) imageUrl
                            .openConnection();
                    conn.setRequestProperty("Authorization", "basic " +
                            Base64.encode("username:password".getBytes()));
                    conn.setConnectTimeout(30000);
                    conn.setReadTimeout(30000);
                    conn.setInstanceFollowRedirects(true);
                    InputStream is = conn.getInputStream();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top