كيف يمكنني تكوين httpclient للمصادقة مقابل وكيل الجوارب؟

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

سؤال

أحتاج إلى إعداد مصادقة الوكيل مقابل وكيل الجوارب. اكتشفت هذا المشنور إعطاء التعليمات التي يبدو أنها تعمل مع وكلاء HTTP المشتركة.

        httpclient.getHostConfiguration().setProxy("proxyserver.example.com", 8080);

        HttpState state = new HttpState();
        state.setProxyCredentials(new AuthScope("proxyserver.example.com", 8080), 
           new UsernamePasswordCredentials("username", "password"));
        httpclient.setState(state);

هل يعمل هذا مع جوارب الوكلاء أيضًا أم لا بد لي من فعل شيء مختلف؟

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

المحلول

ال صفحة الميزات من Apache Httpclient يقول:

اتصالات شفافة من خلال الوكلاء الجوارب (الإصدار 4 و 5) باستخدام دعم مقبس Java الأصلي.

مع "شفاف" ، أعتقد أنهم يعني أنه يعمل دون الحاجة إلى فعل أي شيء مميز. هل لديك وكيل الجوارب متاح في مكان ما؟ ألا يمكنك تجربة ذلك لمعرفة ما إذا كان يعمل؟

نصائح أخرى

يدعم Java تكوين الوكيل Socks عبر التفضيلات:

  • socksProxyHost لاسم المضيف لخادم الوكيل Socks
  • socksProxyPort بالنسبة لرقم المنفذ ، يجري القيمة الافتراضية 1080

على سبيل المثال

java -DsocksProxyHost=socks.mydomain.com

(تعديلعلى مثالك ، إذا تم تكوين وكيل الجوارب بالطريقة المحددة من قبل:

httpclient.getHostConfiguration().setProxy("proxyserver.example.com", 8080);
Credentials cred = new UsernamePasswordCredentials("username","password");
httpclient.getState().setProxyCredentials(AuthScope.ANY, cred); 

يمكنك أيضًا استخدام هذا البديل (بدون httpclient):

SocketAddress addr = new
InetSocketAddress("webcache.mydomain.com", 8080);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); // Type.HTTP for HTTP

لذا فإن إكمال المثال السابق ، يمكننا الآن إضافة:

URL url = new URL("http://java.sun.com/");
URConnection conn = url.openConnection(proxy);

HTH

الجوارب غير مدعومة من قبل httpclient 3 أصلا. يمكنك تجربة دعم الجوارب في JDK كما اقترح الآخرين. التأثير الجانبي هو أن JVM كلك سوف يمر من خلال نفس وكيل الجوارب.

يدعم Java 5 مصادقة اسم المستخدم/كلمة المرور في الجوارب (النوع 2). كل ما عليك فعله هو إعداد المصدق مثل هذا ،

Authenticator.setDefault(new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password.toCharArray());
    }
});

مرة أخرى ، قد لا يعمل هذا من أجلك لأنه يؤثر على جميع المصادقة في JVM (HTTP Auth ، Auth Proxy).

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

إذا وجدت هذه مشكلة ، ألق نظرة على هذه المراسلات, ، حيث يقترح Oleg استخدام HTTPClient 4.0 ، ولكن يشير أيضًا إلى تصحيح محتمل في فئة التكوين المضيف لـ HTTPClient 3.x.

حل آخر ممكن ، وهو المفضل لدي ، هو كتابة وكيل Wrapper HTTP إلى وكيل Socks.

حاولت

System.setProperty("socksProxyHost", "socks.xyz.com");
System.setProperty("socksProxyPort", "1000");

وهو يعمل بشكل جيد.

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