আমি কীভাবে এইচটিপিআরএল সংযোগকে একটি প্রক্সি ব্যবহার করব?


136

আমি যদি এটা করি ...

conn = new URL(urlString).openConnection();
System.out.println("Proxy? " + conn.usingProxy());

এটি প্রিন্ট করে

Proxy? false

সমস্যাটি হচ্ছে, আমি একটি প্রক্সি পিছনে আছি। উইন্ডোজ থেকে জেভিএম এর প্রক্সি তথ্যটি কোথায় পাবে? আমি কীভাবে এটি সেট আপ করব? আমার অন্যান্য সমস্ত অ্যাপ্লিকেশন আমার প্রক্সি দিয়ে পুরোপুরি খুশি মনে হচ্ছে।

উত্তর:


336

জাভা 1.5 যেহেতু আপনি একটি পাস করতে পারেন java.net.Proxy করার উদাহরণ হিসেবে বলা যায় openConnection(proxy)পদ্ধতি:

//Proxy instance, proxy ip = 10.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);

যদি আপনার প্রক্সিটির প্রমাণীকরণের প্রয়োজন হয় তবে এটি আপনাকে প্রতিক্রিয়া দেবে 407।

এই ক্ষেত্রে আপনার নিম্নলিখিত কোডের প্রয়োজন হবে:

    Authenticator authenticator = new Authenticator() {

        public PasswordAuthentication getPasswordAuthentication() {
            return (new PasswordAuthentication("user",
                    "password".toCharArray()));
        }
    };
    Authenticator.setDefault(authenticator);

7
আমরা কি এর মাধ্যমে প্রক্সি ব্যবহারকারীর নাম এবং প্রক্সি পাসওয়ার্ড সরবরাহ করতে পারি?
Xolve

15
বিভিন্ন প্রক্সিগুলির জন্য আপনার যদি আলাদা ব্যবহারকারীর নাম / পাসওয়ার্ড জোড়া থাকে তবে কী হবে? ডিফল্ট প্রমাণীকরণকারীর সেট করার জন্য একটি স্ট্যাটিক পদ্ধতি কল করা আদর্শ নয়, এটি
সিএস

2
প্রমাণীকরণকারী.ডিফল্ট একটি স্ট্যাটিক (অর্থাত্ গ্লোবাল) পরিবর্তনশীল, তাই এটি কেবল একবার। তবে দয়া করে মনে রাখবেন যে উপরে প্রমাণীকরণকারী কেবলমাত্র একটি ন্যূনতম উদাহরণ। এটি একবারে কেবল একটি পাসওয়ার্ড পরিচালনা করতে পারে। গুগল উদাহরণস্বরূপ যা বিভিন্ন পাসওয়ার্ড সহ একাধিক হোস্ট পরিচালনা করতে পারে।
স্ট্রোবস্কোপ

3
8u11 যেহেতু এটি বেসিক প্রমাণীকরণের সাথে ডিফল্টরূপে কাজ করবে না, oracle.com/technetwork/java/javase/8u111-relnotes-3124969.html jdk.http.auth.tunneling.disabledSchemes সিস্টেম সম্পত্তি অবশ্যই এমটিপ্টি
সাদা

3
যদি আপনার ডোমেন থাকে। নিম্নলিখিত হিসাবে করুন:new PasswordAuthentication("domainName\\user", "password".toCharArray());
বিকাশকারী মারিয়াস Žilėnas

34

এটি ইন্টারনেট থেকে উত্তর দেওয়া মোটামুটি সহজ। সিস্টেম বৈশিষ্ট্য সেট করুন http.proxyHostএবং http.proxyPort। আপনি সিনট্যাক্সের System.setProperty()সাহায্যে বা কমান্ড লাইন থেকে এটি করতে পারেন -D


19

প্রক্সি দুটি সিস্টেমের বৈশিষ্ট্যের মাধ্যমে সমর্থিত: http.proxyHost এবং http.proxyPort। সেগুলি যথাক্রমে প্রক্সি সার্ভার এবং পোর্টে সেট করতে হবে। নিম্নলিখিত মৌলিক উদাহরণ এটি চিত্রিত করে:

String url = "http://www.google.com/",
       proxy = "proxy.mydomain.com",
       port = "8080";
URL server = new URL(url);
Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost",proxy);
systemProperties.setProperty("http.proxyPort",port);
HttpURLConnection connection = (HttpURLConnection)server.openConnection();
connection.connect();
InputStream in = connection.getInputStream();
readResponse(in);

@ পাসল আপনি কি অ্যাপাচের তুলনায় সর্বশেষ জাভা পদ্ধতির ব্যবহারের প্রধান পার্থক্যগুলি জানতে পেরেছেন commons-httpclient? জাভা যেমন প্রক্সিং এবং প্রমাণীকরণকে সমর্থন করে (যেমন আপনি এখানে স্ট্যাকওভারফ্লো.com/ জিজ্ঞাসাগুলি / ১6265656549৯/২ উল্লেখ করেছেন ), সহজ ক্ষেত্রে (পাবলিক এইচটিটিপি সার্ভার থেকে একটি ফাইল পুনরুদ্ধার করার মতো) অ্যাপাচি লাইব্রেরি ব্যবহার করার কোনও কারণ নেই। আপনার সুপারিশ কি?
dma_k

@ dma_k আমি আপনার সাথে একমত, আপনার সাধারণ বর্ণনাগুলির মতো সাধারণ ব্যবহারের ক্ষেত্রে আমি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করব না would
পাস্কেল থিভেন্ট

আপনি কীভাবে ননপ্রক্সিহোস্টগুলি সমর্থন করবেন তা জানেন? আমি দেখতে পাচ্ছি যে আমার ডিভাইস এটি সমর্থন করে তবে কীভাবে আমার অ্যাপ্লিকেশনটিকে এটি পরিচালনা করতে পারে তা জানে না।
রিরামোন

তবে ভেরিয়েবল systemPropertiesব্যবহার করে না connection!
পার্সিকার

12

আপনি সেট করতে পারেন

-Djava.net.useSystemProxies=true

উইন্ডোজ এবং লিনাক্সে এটি সিস্টেম সেটিংস ব্যবহার করবে যাতে আপনার নিজের (ডিআরওয়াই) পুনরাবৃত্তি করার প্রয়োজন হয় না

http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html#Proxies


6
এটি কেবল ম্যানুয়াল প্রক্সি সার্ভার কনফিগারেশন নিয়ে কাজ করে। স্ক্রিপ্টের মাধ্যমে কনফিগার করা স্বয়ংক্রিয় প্রক্সি কনফিগারেশন এবং প্রক্সিগুলি "ইউজিসিস্টেমপ্রক্সিজ" তে প্রচারিত হয়নি (এখনও)।
টায়ার

1
প্রক্সিহোস্ট সেট করার সময় এটি আমার পক্ষে কাজ করেছিল এবং প্রক্সিপোর্টটি করেনি। ধন্যবাদ!
nrobey

একইভাবে, এই আমার কোম্পানির প্রক্সি আড়াল থেকে কাজ যখন কল System.setPropertyজন্য https.proxyHostএবং https.proxyPortকিছু কারণে সরিষা কাটা হয় নি।
পাভেল কোমারোভ

10

আপনি সংযোগটি ওপেন করার আগে নিম্নলিখিতগুলি সেট করুন,

System.setProperty("http.proxyHost", "host");
System.setProperty("http.proxyPort", "port_number");

যদি প্রক্সিটির প্রমাণীকরণের প্রয়োজন হয়,

System.setProperty("http.proxyUser", "user");
System.setProperty("http.proxyPassword", "password");

7
আমি আসলে মনে করি "http.proxyUser" এবং "http.proxyPassword" আর সমর্থিত নয়। আরও তথ্যের জন্য stackoverflow.com/questions/120797/… দেখুন ।
p3t0r

5

জাভা 1.8 এবং উচ্চতর জন্য আপনার অবশ্যই -Djdk.http.auth.tunneling.disabledSchemes=বেসিক অনুমোদনের সাথে https- র সাথে প্রক্সি তৈরি করতে হবে ।


1
এই সম্বন্ধে পটভূমির তথ্য এ আলোচনা করা হয় stackoverflow.com/questions/41806422/...
U880D

2

অনুমোদিত উত্তরটি কাজ করবে ... আপনি যদি আপনার প্রক্সি হোস্ট এবং পোর্ট =) জানেন। তবে আপনি প্রক্সি হোস্টের সন্ধান করছেন এবং নীচের পদক্ষেপগুলিতে পোর্টটি সহায়তা করা উচিত

যদি অটো কনফিগার করা প্রক্সি দেওয়া হয়: তবে

1> আইই খুলুন (বা কোনও ব্রাউজার)

2> আইআর-> সরঞ্জাম-> ইন্টারনেট বিকল্প-> সংযোগগুলি-> ল্যান সেটিংস-> ঠিকানা পান এবং ইউআরএল প্রদান করুন: http://autocache.abc.com/ হিসাবে প্রবেশ করুন এবং এ ফাইলটি .pac বিন্যাসের সাথে ডাউনলোড করা হবে, ডেস্কটপে সংরক্ষণ করুন

3> টেক্সটপ্যাডে .pac ফাইলটি খুলুন, প্রক্স সনাক্ত করুন:

আপনার সম্পাদকটিতে এটি এমন কিছু আসবে:

"PROXY web-proxy.ind.abc.com:8080; PROXY proxy.sgp.abc.com:8080" প্রদান করুন;

5 মিনিটে মাভেন থেকে বুকুরে কূডো কাজ করছে না

আপনার একবার হোস্ট এবং পোর্টটি এটিকে পপ ইন করুন এবং আপনার ভাল লাগবে

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("web-proxy.ind.abc.com", 8080));
        URLConnection connection = new URL(url).openConnection(proxy);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.