জাভাতে কোনও বৈধ ইউআরএল কীভাবে পরীক্ষা করবেন?


96

জাভাতে কোনও URL টি বৈধ কিনা তা যাচাই করার সর্বোত্তম উপায় কী?

যদি ফোন করতে new URL(urlString)এবং ধরার চেষ্টা করা হয় MalformedURLExceptionতবে মনে হয় যে কোনও কিছু দিয়েই এটি খুশি http://

আমি কোনও সংযোগ স্থাপনের বিষয়ে উদ্বিগ্ন নই, কেবল বৈধতা। এই জন্য কোন পদ্ধতি আছে? হাইবারনেট ভ্যালিডেটরে কোনও টিকা? আমি কি একটি রেইজেক্স ব্যবহার করব?

সম্পাদনা: গৃহীত ইউআরএলগুলির কয়েকটি উদাহরণ হ'ল http://***এবং http://my favorite site!


আপনি কোনও সংযোগ স্থাপন করতে যাচ্ছেন না তবে আপনি কীভাবে বৈধতা নির্ধারণ করবেন?
মাইকেল ম্যাইইয়ার্স

4
আপনি কি এমন কিছুর উদাহরণ দিতে পারেন যা URLনির্ধারক গ্রহণযোগ্য বৈধ URL নয় ?
uckelman

4
@ এমমিয়ার্স: আরএফসি 2396 এবং 2732 দ্বারা বৈধতা নির্ধারণ করা উচিত, যেগুলি URL কী তা সংজ্ঞায়িত করে।
uckelman

4
@ ইউকেলম্যান: যে কোনও কিছুর কথা। " http://***" কাজ করে। " http://my favorite site!" কাজ করে। আমি এটি একটি ব্যতিক্রম ছুঁড়ে ফেলতে পারি না (যখন HTTP: // শুরুতে হয়))
এরিক উইলসন

উত্তর:


102

অ্যাপাচি কমন্স আরলভালিডেটর ক্লাসটি ব্যবহার করার কথা বিবেচনা করুন

UrlValidator urlValidator = new UrlValidator();
urlValidator.isValid("http://my favorite site!");

বিভিন্ন বৈশিষ্ট্য আপনি নিয়ন্ত্রণ কিভাবে এই শ্রেণীর আচরণ করবে, ডিফল্ট অনুসারে সেট করতে পারেন যে http, httpsএবং ftpগৃহীত হয়।


7
এটি নতুন ডোমেন যেমন লন্ডন ইত্যাদির সাথে কাজ করে বলে মনে হচ্ছে না
ভিএইচ

ইন্ট্রানেট ইউআরএল সম্পর্কে কীভাবে?
পুনেত

এটি আন্ডারস্কোর সহ ইউআরএলকে বৈধতা দেয় না।
উদিত কুমাওয়াত

নতুন টিএলডি এবং স্থানীয় ডোমেন নাম, যেমন localইত্যাদির সাথে কাজ করে না

আমি আমাদের জ্যাকেটে ইন্ট্রনেট শীর্ষ স্তরের ডোমেনের সাথে কাজ করতে আরলিভালিডেটরটি পাইনি। .Com, .org, এবং এই জাতীয় কাজের মতো সাধারণগুলি। আমি এই বিষয়ে একটি RegExp তৈরি করতে আগ্রহী না তাই new URL(name).toURI()সমাধান হয়ে যায়।
অ্যাভেক

60

এখানে আমি চেষ্টা করেছি এবং দরকারী খুঁজে পেয়েছি,

URL u = new URL(name); // this would check for the protocol
u.toURI(); // does the extra checking required for validation of URI 

4
ভাল একটা. সবেমাত্র নতুন ইউআরএল (নাম) ব্যবহার করা প্রায় সমস্ত কিছু গ্রহণ করে। Url.toURI (); অন্যান্য গ্রন্থাগার / ফ্রেমওয়ার্ক ব্যবহার না করেই বিকাশকারী ঠিক ঠিক কী খুঁজছেন!
justastefan

4
এটি http: /google.com এর মতো বিকৃত URL গুলির জন্যও কাজ করবে না। আমি অ্যাপাচি কমন্স থেকে আরলভালিডেটর ব্যবহার করেছি।
স্টারফ

4
এটি সত্যিই বিপজ্জনক। আমি দেখতে পাই যে এই উদাহরণ সহ আরও অনেক নিবন্ধ আছে। URL u = new URL(http://google).toURI();একটি ব্যতিক্রম নিক্ষেপ করবে না।
সোনু ওমেন

4
@ সোনুউমেন সম্ভবত new URL(http://google)বৈধ কারণ ^^ আমার সংস্থায় আমাদের মতো প্রচুর অভ্যন্তরীণ ডোমেন রয়েছে
ইউজার 43968

8

আমি এটি টেন্ডাই মাউউশের উত্তরের মন্তব্য হিসাবে পোস্ট করতে চাই তবে আমি ভয় করি যে সেখানে পর্যাপ্ত জায়গা নেই;)

এটি অ্যাপাচি কমন্স আরলভালিডেটর উত্স থেকে প্রাসঙ্গিক অংশ :

/**
 * This expression derived/taken from the BNF for URI (RFC2396).
 */
private static final String URL_PATTERN =
        "/^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/";
//         12            3  4          5       6   7        8 9

/**
 * Schema/Protocol (ie. http:, ftp:, file:, etc).
 */
private static final int PARSE_URL_SCHEME = 2;

/**
 * Includes hostname/ip and port number.
 */
private static final int PARSE_URL_AUTHORITY = 4;

private static final int PARSE_URL_PATH = 5;

private static final int PARSE_URL_QUERY = 7;

private static final int PARSE_URL_FRAGMENT = 9;

আপনি সহজেই সেখান থেকে আপনার নিজস্ব বৈধকারক তৈরি করতে পারেন।


6

সর্বাধিক "বোকামি" উপায় হ'ল ইউআরএলটির উপলব্ধতা যাচাই করা:

public boolean isURL(String url) {
  try {
     (new java.net.URL(url)).openStream().close();
     return true;
  } catch (Exception ex) { }
  return false;
}

5

বাহ্যিক লাইব্রেরি ছাড়া আমার পছন্দসই পদ্ধতি:

try {
    URI uri = new URI(name);

    // perform checks for scheme, authority, host, etc., based on your requirements

    if ("mailto".equals(uri.getScheme()) {/*Code*/}
    if (uri.getHost() == null) {/*Code*/}

} catch (URISyntaxException e) {
}

3

জন্য উত্স কোড দ্বারা বিচার URI,

public URL(URL context, String spec, URLStreamHandler handler)

কনস্ট্রাক্টর অন্যান্য কনস্ট্রাক্টরের চেয়ে বেশি বৈধতা দেয়। আপনি এটি চেষ্টা করতে পারেন, তবে ওয়াইএমএমভি।


3

আমি কোনও বাস্তবায়ন পছন্দ করি না (কারণ তারা একটি রেজিেক্স ব্যবহার করে যা একটি ব্যয়বহুল অপারেশন, বা একটি লাইব্রেরি যা ওভারকিল যা আপনার যদি কেবল একটি পদ্ধতির প্রয়োজন হয়), তাই আমি জাভা.net. ইউআরআই ক্লাসটি কিছু দিয়ে শেষ করেছি অতিরিক্ত চেক এবং প্রোটোকলগুলিতে সীমাবদ্ধ করে: HTTP, https, ফাইল, এফটিপি, মেলটো, সংবাদ, কল।

এবং হ্যাঁ, ব্যতিক্রম ধরা ব্যয়বহুল ক্রিয়াকলাপ হতে পারে তবে নিয়মিত এক্সপ্রেশনগুলির মতো সম্ভবত খারাপ নয়:

final static Set<String> protocols, protocolsWithHost;

static {
  protocolsWithHost = new HashSet<String>( 
      Arrays.asList( new String[]{ "file", "ftp", "http", "https" } ) 
  );
  protocols = new HashSet<String>( 
      Arrays.asList( new String[]{ "mailto", "news", "urn" } ) 
  );
  protocols.addAll(protocolsWithHost);
}

public static boolean isURI(String str) {
  int colon = str.indexOf(':');
  if (colon < 3)                      return false;

  String proto = str.substring(0, colon).toLowerCase();
  if (!protocols.contains(proto))     return false;

  try {
    URI uri = new URI(str);
    if (protocolsWithHost.contains(proto)) {
      if (uri.getHost() == null)      return false;

      String path = uri.getPath();
      if (path != null) {
        for (int i=path.length()-1; i >= 0; i--) {
          if ("?<>:*|\"".indexOf( path.charAt(i) ) > -1)
            return false;
        }
      }
    }

    return true;
  } catch ( Exception ex ) {}

  return false;
}

2

বৈধতা প্যাকেজ:

ইউলাতান ম্যাটালনের একটি ভাল প্যাকেজ আছে বলে মনে হচ্ছে আরলুটিল । এর এপিআই উদ্ধৃত:

isValidWebPageAddress(java.lang.String address, boolean validateSyntax, 
                      boolean validateExistance) 
Checks if the given address is a valid web page address.

সূর্যের পদ্ধতির - নেটওয়ার্কের ঠিকানাটি পরীক্ষা করুন

সূর্যের জাভা সাইট ইউআরএলগুলি যাচাই করার সমাধান হিসাবে সংযুক্ত প্রয়াসের প্রস্তাব দেয় ।

অন্যান্য রেগেক্স কোড স্নিপেটস:

ওরাকল এর সাইট এবং ওয়েবারদেব ডট কম এ রেগেক্স বৈধতার প্রচেষ্টা রয়েছে ।


4
এই কোডটি লিঙ্কগুলি যাচাই করার জন্য, যা একটি ভিন্ন সমস্যা। এই প্রশ্নটি URL টির বৈধতা সম্পর্কিত, এটির সাথে কোনও সংযোগ স্থাপন করা যায় কিনা তা নয়।
মাইকেল ম্যাইইয়ার্স

এই উদাহরণটি ইউআরএল উপলব্ধ কিনা তা যাচাই করা সম্পর্কে রয়েছে, এটি সু-গঠিত কিনা তা নয়।
uckelman

সম্মত, অন্যান্য পন্থা যুক্ত।
আদম মতান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.