كيف يمكنني تكوين httpclient للمصادقة مقابل وكيل الجوارب؟
-
21-09-2019 - |
سؤال
أحتاج إلى إعداد مصادقة الوكيل مقابل وكيل الجوارب. اكتشفت هذا المشنور إعطاء التعليمات التي يبدو أنها تعمل مع وكلاء 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
لاسم المضيف لخادم الوكيل SockssocksProxyPort
بالنسبة لرقم المنفذ ، يجري القيمة الافتراضية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");
وهو يعمل بشكل جيد.