জাভাতে কোনও ইউআরএল বা ইউআরআই রচনা করার অলঙ্কৃত উপায় কী?


115

আমি জাভাতে কোনও ইউআরএল বা ইউআরআই কীভাবে তৈরি করব? কোনও মুশকিল উপায় বা লাইব্রেরিগুলি সহজেই এটি করতে পারে?

আমাকে অনুরোধের স্ট্রিং থেকে শুরু করে বিভিন্ন ইউআরএল অংশগুলি (স্কিম, হোস্ট, পাথ, কোয়েরি স্ট্রিং) পার্স / পরিবর্তন এবং সমর্থন এবং স্বয়ংক্রিয়ভাবে ক্যোয়ারি প্যারামিটারগুলি এনকোডিং সমর্থন করতে হবে।


7
প্রশ্নটি বন্ধ হওয়ার অনেক পরে উত্সাহ প্রদান করা কারণ এই সমস্যার কোনও জনপ্রিয় অ-অবহেলিত সমাধান বিদ্যমান কিনা তা পরিষ্কার নয়। আমি 'জাভা ইউআরএল প্যারামিটার ক্লাস' এর জন্য গুগল করে এটি পেয়েছি।
ব্যবহারকারী 1445967

4
আমার উদ্দেশ্য ছিল জাভাটির জন্য একটি ইউআরএল নির্মাতা খুঁজে পাওয়া এবং এটি আমার পক্ষে কমপক্ষে কার্যকর।
ঘূর্ণি

উত্তর:


76

অফিসিয়াল টিউটোরিয়াল থেকে অ্যাপাচি এইচটিটিপি কম্পোনেন্ট এইচটিটিপি ক্লায়েন্ট 4.1.3 হিসাবে :

public class HttpClientTest {
public static void main(String[] args) throws URISyntaxException {
    List<NameValuePair> qparams = new ArrayList<NameValuePair>();
    qparams.add(new BasicNameValuePair("q", "httpclient"));
    qparams.add(new BasicNameValuePair("btnG", "Google Search"));
    qparams.add(new BasicNameValuePair("aq", "f"));
    qparams.add(new BasicNameValuePair("oq", null));
    URI uri = URIUtils.createURI("http", "www.google.com", -1, "/search",
                                 URLEncodedUtils.format(qparams, "UTF-8"), null);
    HttpGet httpget = new HttpGet(uri);
    System.out.println(httpget.getURI());
    //http://www.google.com/search?q=httpclient&btnG=Google+Search&aq=f&oq=
}
}

সম্পাদনা করুন: v4.2 হিসাবে URIUtils.createURI()অনুগ্রহ করে হ'ল URIBuilder:

URI uri = new URIBuilder()
        .setScheme("http")
        .setHost("www.google.com")
        .setPath("/search")
        .setParameter("q", "httpclient")
        .setParameter("btnG", "Google Search")
        .setParameter("aq", "f")
        .setParameter("oq", "")
        .build();
HttpGet httpget = new HttpGet(uri);
System.out.println(httpget.getURI());

20
এটি কাজ করে, তবে v4.2 হিসাবে ইউআরআইটিসস ক্রেইটুরি () ইউআরআইবিল্ডারের পক্ষে অবচয় করা হয়েছে। ইতিবাচক দিক থেকে এই ইউআরআই বিল্ডারের একটি অ্যাডপ্যারামিটার () পদ্ধতি রয়েছে বলে মনে হচ্ছে বিল্ডিংয়ের অনুরোধের স্ট্রিংগুলি অন্তত এখন সহজ হওয়া উচিত।
স্ট্যান করুন

6
URIBuilder builder = new URIBuilder() .setScheme("http") .setHost("www.google.com") .setParameters(qparams);যেমন @ স্টিয়ান বলেছেন
vanduc1102

উপরের প্রিন্টলন নিম্নলিখিতগুলি মুদ্রণ করে; google.com/...
Berkan Ercan থেকে

61

লেখক হিসাবে, আমি সম্ভবত আমার URL / ইউআরআই নির্মাতা ভাল কিনা তা বিচার করার পক্ষে সেরা ব্যক্তি নই , তবে তবুও এটি এখানে রয়েছে: https://github.com/mikaelhg/urlbuilder

আমি জেডিকে বাইরে শূন্য নির্ভরতা সহ সহজতম সম্পূর্ণ সমাধানটি চেয়েছিলাম, তাই আমাকে নিজের রোল করতে হয়েছিল।


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

দেখতে দেখতে দুর্দান্ত লাগছে, তবে যেহেতু এটি নির্মাতা এবং এইভাবে পরিবর্তনীয়, তাই কেন কেবল পরামিতিগুলির জন্য সেটটার রয়েছে, তবে হোস্ট, বন্দর, প্রোটোকল এবং পাথের জন্য নয়? এবং, ভাল, তাদের জন্য কোনও গেটরও নেই। ইউপিডি: ওহ, এটি পরিবর্তনযোগ্য নয় - সেটপ্যারামিটার একটি ক্লোন তৈরি করে। ঠিক আছে, এখনও সেটহোস্ট / সেটপোর্ট / ... একইভাবে কাজ করতে পারে। অথবা, সম্ভবত, একটি পরিবর্তনীয় সংস্করণও ভাল লাগবে।
এমভিএমএন

3
"শূন্য নির্ভরতার সাথে সহজতম সম্পূর্ণ সমাধান" - আপনার মতামতগুলি কী জানে তা গুরুত্বপূর্ণ! আপনার উত্তরটি গ্রহণযোগ্য এক ইমো হওয়া উচিত। এইচটিপিপি্লিয়েন্টের সমস্ত সহ (এটির সমস্ত সংস্করণ আপডেটের সাথে এবং এই প্রশ্নটি সম্পর্কে যে API টি হ'ল এমনকি এটি কেবলমাত্র একটি ইউআরএল তৈরি করার জন্য শীর্ষ-ভারী বাগ-ধাঁধাযুক্ত অ্যাপ্লিকেশনগুলিকে তৈরি করে।
স্টিজন ডি উইট

2
অবশেষে ম্যাভেন সেন্ট্রালে, এবং এটি করতে আমাকে কেবল চার বছর সময় লেগেছে।
মিকেল গুইক

@ এমিকায়েলহগ আপনাকে ধন্যবাদ! এই মুহুর্তে আমার ঠিক দরকার!
ফ্যাবিয়ান ডামকেন


29

HTTPClient ব্যবহার ভাল কাজ করেছে।

protected static String createUrl(List<NameValuePair> pairs) throws URIException{

  HttpMethod method = new GetMethod("http://example.org");
  method.setQueryString(pairs.toArray(new NameValuePair[]{}));

  return method.getURI().getEscapedURI();

}

6
এটি এখন কার্যকারিতা হ্রাস করা হয়। নতুন এইচটিটিপি কম্পোনেন্ট প্যাকেজটি কীভাবে ব্যবহার করতে হয় তা কি কেউ জানে কারণ এটি আমাকে স্ট্যাম্প করেছে।
19

3
নতুন 4x সংস্করণ এটিকে আর সমর্থন করে না।
জোসচা

13

প্রচুর লাইব্রেরি রয়েছে যা আপনাকে ইউআরআই বিল্ডিংয়ে সহায়তা করতে পারে (চাকাটি পুনরায় উদ্ভাবন করবেন না)। আপনাকে শুরু করার জন্য এখানে তিনটি:


জাভা ইই 7

import javax.ws.rs.core.UriBuilder;
...
return UriBuilder.fromUri(url).queryParam(key, value).build();

org.apache.httpcomponents: httpclient: 4.5.2

import org.apache.http.client.utils.URIBuilder;
...
return new URIBuilder(url).addParameter(key, value).build();

org.springframework: বসন্ত ওয়েব: 4.2.5.RELEASE

import org.springframework.web.util.UriComponentsBuilder;
...
return UriComponentsBuilder.fromUriString(url).queryParam(key, value).build().toUri();

আরও দেখুন: জিআইএসটি> ইউআরআই বিল্ডার টেস্ট


2
EE 7 সঠিক উত্তর। আপনাকে যা করতে হবে তা হ'ল ইই লাইব্রেরির পুরো স্যুটটি টানতে হবে, একটি জ্যাক্স-আরএস বাস্তবায়ন বেছে নেওয়া, জ্যাক্স-আরএস সংস্করণ বিরোধগুলি সমাধান করুন এবং পুরষ্কার হিসাবে আপনার হাতে একটি দুর্দান্ত ইউরিবিল্ডার শ্রেণি থাকবে যা সত্যই ভাল কাজ করে। বিদ্রূপ সরাইয়া, এই হল সঠিক উত্তর। :)
টেকহেইড


10

OkHttp ব্যবহার করুন

এটি ২০২০ এবং ওকেএইচটিপি নামে একটি খুব জনপ্রিয় গ্রন্থাগার রয়েছে যা গিটহাবের উপরে 35K বার অভিনীত হয়েছে । এই লাইব্রেরির সাহায্যে আপনি নীচের মতো একটি ইউআরএল তৈরি করতে পারেন:

import okhttp3.HttpUrl;

URL url = new HttpUrl.Builder()
    .scheme("http")
    .host("example.com")
    .port(4567)
    .addPathSegment("foldername/1234")
    .addQueryParameter("abc", "xyz")
    .build().url();

আমি একটি টাইপো স্থির করেছি, এটি addPathSegment(নয় addPathSegments)।
পাপাফ্রেড

1

ইউআরএল বর্গ পরামর্শ দেওয়ার জন্য lambasted পরে। আমি মন্তব্যকারীর পরামর্শ নেব এবং পরিবর্তে ইউআরআই ক্লাসের পরামর্শ দেব । আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি ইউআরআইয়ের জন্য নির্মাতাদের ঘনিষ্ঠভাবে দেখেন কারণ ক্লাসটি একবার তৈরি হয়ে গেলে এটি খুব অপরিবর্তনীয়।
আমি মনে করি এই নির্মাতা আপনাকে ইউআরআইতে যা প্রয়োজন হতে পারে সেগুলি সেট করার অনুমতি দেয়।

URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment)
          Constructs a hierarchical URI from the given components.

8
তবে এটি নামের মান জোড়াগুলির সেট থেকে কোয়েরি স্ট্রিংটি প্রকৃতপক্ষে নির্মাণ এবং এনকোড করার কার্যকারিতা সরবরাহ করে না।
19

4
শিশু প্রজিজি যেমন অ্যালান পার্ট্রিজকে বলেছিলেন - কারওর অপরিবর্তনীয়তা হ্রাস হতে পারে না, হয় হয় বা হয় না ;-) youtube.com/watch?v=_lvFns5Lubc
স্টুয়ার্ট

ইউআরআই এর নির্মাতা পথে খারাপ জিনিস করেন। বিস্তারিত জানার জন্য blog.palominolabs.com/2013/10/03/… দেখুন ।
এমপিয়ার্স

1
এই উত্তরটি কীভাবে এটি না করা যায় তার উদাহরণ হিসাবে দাঁড়ান।
মাইক পোনে

1
স্ট্রিং ক্যোয়ারী ... গ্রানুলারিটির জন্য ধন্যবাদ সূর্য / ওরাকল। আমরা কেবল সমস্ত স্থানকে প্লাস চিহ্নের সাথে প্রতিস্থাপন করব, সমস্ত পরামিতিগুলি ইউরি-এনকোড করব এবং এম্পারস্যান্ড প্রতীকগুলির সাথে সেগুলি সমস্ত এক সাথে সংযুক্ত করব ... বারবার টেবিলের উপরে মাথা
ঠেকানো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.