ToolDeck

URL পার্সার

URL কে এর উপাদানে বিভক্ত করুন — প্রোটোকল, হোস্ট, পাথ, কোয়েরি প্যারামিটার, হ্যাশ

একটি উদাহরণ চেষ্টা করুন
এটাও ব্যবহার করুন:URL Encode OnlineURL Decode Online

URL পার্সিং কী?

URL পার্সিং হলো একটি Uniform Resource Locator-কে তার পৃথক উপাদানে বিভক্ত করার প্রক্রিয়া: প্রোটোকল (scheme), হোস্টনেম, পোর্ট, পাথনেম, কোয়েরি প্যারামিটার এবং ফ্র্যাগমেন্ট আইডেন্টিফায়ার। প্রতিটি URL, RFC 3986 এবং WHATWG URL Standard দ্বারা নির্ধারিত একটি কাঠামো অনুসরণ করে। একটি URL পার্সার কাঁচা স্ট্রিং পড়ে, বিভাজক অক্ষরগুলোর (://, :, /, ?, #, &, =) সাহায্যে প্রতিটি অংশ চিহ্নিত করে এবং সেগুলো আলাদা, অ্যাক্সেসযোগ্য ফিল্ড হিসেবে ফেরত দেয়।

আপনি যখনই কোনো ঠিকানা টাইপ করেন বা কোনো লিংকে ক্লিক করেন, ব্রাউজার URL পার্সিং করে। JavaScript-এর URL কনস্ট্রাক্টর, Python-এর urllib.parse মডিউল এবং Go-এর net/url প্যাকেজ — সবই একই কাঠামোগত নিয়ম অনুসরণ করে পার্সার তৈরি করেছে। URL পার্সিং হলো URL এনকোডিং-এর বিপরীত ক্রিয়া: নিরাপদ পরিবহনের জন্য অক্ষর রূপান্তর করার পরিবর্তে, আপনি একটি সম্পূর্ণ URL-কে তার গঠনকারী অংশে বিভক্ত করেন।

https://api.example.com:8080/v1/users?page=2&limit=10#section-এর মতো একটি সাধারণ URL-এ ছয়টি স্বতন্ত্র উপাদান রয়েছে। বিভাজক অক্ষরগুলো — ://, :, /, ?, &, =, এবং # — পার্সিং অস্পষ্টতামুক্ত রাখে: প্রতিটি চিহ্ন একটি সীমানা নির্দেশ করে এবং পার্সারকে কোনো অস্পষ্টতা ছাড়াই ফিল্ড বের করতে সাহায্য করে।

অনলাইন URL পার্সার কেন ব্যবহার করবেন?

ম্যানুয়ালি URL ভাগ করা ত্রুটিপ্রবণ — বিশেষত যখন স্ট্রিংয়ে এনকোড করা অক্ষর, একাধিক কোয়েরি প্যারামিটার বা অ-মানক পোর্ট থাকে। এই টুলটি ব্রাউজার যে WHATWG-সামঞ্জস্যপূর্ণ অ্যালগরিদম ব্যবহার করে সেটি দিয়ে URL পার্স করে এবং প্রতিটি উপাদান একটি স্বচ্ছ, কপিযোগ্য টেবিলে প্রদর্শন করে।

ব্রাউজারে তাৎক্ষণিক পার্সিং
যেকোনো URL পেস্ট করুন এবং সঙ্গে সঙ্গে সব উপাদান বিভক্ত দেখুন। কোনো পেজ রিলোড নেই, কোনো সার্ভার কল নেই, অপেক্ষার দরকার নেই।
🔒
আপনার URL গোপন রাখুন
পার্সিং সম্পূর্ণভাবে আপনার ব্রাউজারে native URL API ব্যবহার করে চলে। আপনার টাইপ করা URL কখনো আপনার মেশিন ছেড়ে যায় না।
🔍
প্রতিটি বিস্তারিত পরিদর্শন করুন
প্রোটোকল, হোস্টনেম, পোর্ট, পাথনেম, কোয়েরি স্ট্রিং, হ্যাশ এবং প্রতিটি পৃথক কোয়েরি প্যারামিটার তার ডিকোড করা মানসহ দেখুন।
📋
পৃথক উপাদান কপি করুন
যেকোনো ফিল্ডের পাশে কপি বোতামে ক্লিক করে সঠিক মানটি নিন। সাবস্ট্রিং ম্যানুয়ালি নির্বাচন ও ছাঁটাই করার প্রয়োজন নেই।

URL পার্সারের ব্যবহারের ক্ষেত্র

ফ্রন্টএন্ড রাউটিং ডিবাগিং
পাথ সেগমেন্ট ও হ্যাশ ফ্র্যাগমেন্ট আপনার রাউটার কনফিগারেশনের সাথে মিলছে কিনা যাচাই করুন। 404 ঘটার আগেই ভুল জায়গার স্ল্যাশ বা অপ্রত্যাশিত কোয়েরি প্যারামিটার খুঁজে বের করুন।
ব্যাকএন্ড API এন্ডপয়েন্ট যাচাই
রুট হ্যান্ডলার বা মিডলওয়্যার লেখার আগে নিশ্চিত করুন যে আগত রিকোয়েস্ট URL-এ সঠিক হোস্টনেম, পোর্ট এবং পাথ কাঠামো রয়েছে।
DevOps রিডাইরেক্ট নিয়ম পরীক্ষা
Nginx, Apache বা CDN রিডাইরেক্ট নিয়ম লেখার সময়, মূল ও লক্ষ্য URL পার্স করে নিশ্চিত করুন প্রতিটি উপাদান সঠিকভাবে ম্যাপ হচ্ছে।
QA লিংক যাচাইকরণ
টেস্ট রিপোর্ট বা বাগ টিকেট থেকে URL পার্স করুন যাতে বুঝতে পারেন কোন কোয়েরি প্যারামিটার বা ফ্র্যাগমেন্ট ভুল পেজ লোড করাচ্ছে।
ডেটা পাইপলাইনে URL নিষ্কাশন
লগ ফাইল বা অ্যানালিটিক্স ডেটার URL থেকে হোস্টনেম বা পাথ সেগমেন্ট বের করুন, ডোমেইন-স্তরের রিপোর্ট তৈরি করতে বা এন্ডপয়েন্ট অনুযায়ী ট্র্যাফিক ফিল্টার করতে।
URL কাঠামো শেখা
ওয়েব প্রোটোকলে নতুন শিক্ষার্থী ও ডেভেলপাররা বাস্তব URL পেস্ট করে সঙ্গে সঙ্গে দেখতে পারবেন কোন বিভাজক চিহ্ন কোন সীমানা নির্দেশ করে।

URL উপাদানের রেফারেন্স

নিচের টেবিলে দেখানো হয়েছে JavaScript URL কনস্ট্রাক্টর একটি URL পার্স করার সময় যে প্রপার্টিগুলো ফেরত দেয়। একই উপাদানগুলো Python-এর urlparse ফলাফল, Go-এর url.URL স্ট্রাক্ট এবং PHP-এর parse_url আউটপুটেও বিদ্যমান, যদিও ভাষা অনুযায়ী প্রপার্টির নাম ভিন্ন।

প্রপার্টিউদাহরণবিবরণ
protocolhttps:Scheme including the trailing colon
hostnameapi.example.comDomain name or IP address
port8080Port number (empty string if default)
pathname/v1/usersPath starting with /
search?page=2&limit=10Query string including the leading ?
hash#sectionFragment identifier including the leading #
originhttps://api.example.com:8080protocol + hostname + port
hostapi.example.com:8080hostname + port
usernameadminCredentials before @ (rarely used in practice)
passwordsecretCredentials before @ (avoid in production URLs)
href(full URL)The complete, serialized URL string

WHATWG URL Standard বনাম RFC 3986

দুটি স্পেসিফিকেশন URL পার্স করার পদ্ধতি নির্ধারণ করে। তারা মৌলিক কাঠামোতে একমত, কিন্তু প্রান্তিক ক্ষেত্রে আলাদা আচরণ করে — এবং সেই পার্থক্যই সাধারণত তখন দায়ী যখন আপনার ব্রাউজার সার্ভারের চেয়ে ভিন্নভাবে একটি URL পরিচালনা করে।

WHATWG URL Standard
সব আধুনিক ব্রাউজার এবং JavaScript URL কনস্ট্রাক্টর ব্যবহার করে। অপরিষ্কার ইনপুট গ্রহণ ও স্বাভাবিক করে: অনুপস্থিত scheme, পাথ বিভাজক হিসেবে ব্যাকস্ল্যাশ, Punycode দিয়ে non-ASCII হোস্টনেম। url.spec.whatwg.org-এ একটি living standard হিসেবে সংজ্ঞায়িত।
RFC 3986
আনুষ্ঠানিক IETF স্পেসিফিকেশন (২০০৫)। WHATWG-এর চেয়ে কঠোর: কিছু ইনপুট প্রত্যাখ্যান করে যা ব্রাউজার গ্রহণ করে। Go-এর net/url এবং Python-এর urllib.parse সহ অনেক সার্ভার-সাইড লাইব্রেরি ব্যবহার করে। RFC 3986-এ সংজ্ঞায়িত।

ব্যবহারিকভাবে, বেশিরভাগ পার্থক্য দেখা যায় যখন আন্তর্জাতিক ডোমেইন নাম (IDN), অনুপস্থিত scheme বা অস্বাভাবিক অক্ষর সহ URL পার্স করা হয়। WHATWG পার্সার স্বয়ংক্রিয়ভাবে IDN হোস্টনেমকে Punycode-এ রূপান্তর করে, যেখানে কঠোর RFC 3986 পার্সার সেগুলো প্রত্যাখ্যান করতে পারে। আপনি যদি এই টুলে একটি URL পেস্ট করেন এবং আপনার সার্ভার-সাইড কোডের চেয়ে ভিন্ন ফলাফল দেখেন, তাহলে WHATWG বনাম RFC পার্থক্যই সম্ভবত কারণ।

কোড উদাহরণ

প্রতিটি প্রধান ভাষায় একটি অন্তর্নির্মিত URL পার্সার রয়েছে। নিচের উদাহরণগুলো একই URL পার্স করে এবং তার উপাদান বের করে। ভাষা অনুযায়ী নামকরণের ছোট পার্থক্য লক্ষ্য করুন: Python protocol-এর পরিবর্তে scheme ব্যবহার করে, এবং Go search-এর পরিবর্তে RawQuery উন্মুক্ত করে।

JavaScript (browser / Node.js)
const url = new URL('https://api.example.com:8080/v1/users?page=2&limit=10#section')

url.protocol  // → "https:"
url.hostname  // → "api.example.com"
url.port      // → "8080"
url.pathname  // → "/v1/users"
url.search    // → "?page=2&limit=10"
url.hash      // → "#section"

// Iterate over query parameters
for (const [key, value] of url.searchParams) {
  console.log(`${key} = ${value}`)
}
// → "page = 2"
// → "limit = 10"

// Modify and re-serialize
url.searchParams.set('page', '3')
url.toString()
// → "https://api.example.com:8080/v1/users?page=3&limit=10#section"
Python
from urllib.parse import urlparse, parse_qs

result = urlparse('https://api.example.com:8080/v1/users?page=2&limit=10#section')

result.scheme    # → 'https'
result.hostname  # → 'api.example.com'
result.port      # → 8080
result.path      # → '/v1/users'
result.query     # → 'page=2&limit=10'
result.fragment  # → 'section'

# Parse query string into a dict
params = parse_qs(result.query)
params['page']   # → ['2']
params['limit']  # → ['10']

# Reconstruct with modifications
from urllib.parse import urlencode, urlunparse
new_query = urlencode({'page': '3', 'limit': '10'})
urlunparse(result._replace(query=new_query))
# → 'https://api.example.com:8080/v1/users?page=3&limit=10#section'
Go
package main

import (
	"fmt"
	"net/url"
)

func main() {
	u, err := url.Parse("https://api.example.com:8080/v1/users?page=2&limit=10#section")
	if err != nil {
		panic(err)
	}

	fmt.Println(u.Scheme)   // → "https"
	fmt.Println(u.Hostname()) // → "api.example.com"
	fmt.Println(u.Port())     // → "8080"
	fmt.Println(u.Path)       // → "/v1/users"
	fmt.Println(u.RawQuery)   // → "page=2&limit=10"
	fmt.Println(u.Fragment)   // → "section"

	// Query params as map
	q := u.Query()
	fmt.Println(q.Get("page"))  // → "2"
	fmt.Println(q.Get("limit")) // → "10"
}
PHP
<?php
$url = 'https://api.example.com:8080/v1/users?page=2&limit=10#section';
$parts = parse_url($url);

$parts['scheme'];   // → "https"
$parts['host'];     // → "api.example.com"
$parts['port'];     // → 8080
$parts['path'];     // → "/v1/users"
$parts['query'];    // → "page=2&limit=10"
$parts['fragment']; // → "section"

// Parse query string into an array
parse_str($parts['query'], $params);
$params['page'];    // → "2"
$params['limit'];   // → "10"

সাধারণ জিজ্ঞাসা

URL এবং URI-এর মধ্যে পার্থক্য কী?
একটি URL (Uniform Resource Locator) হলো URI (Uniform Resource Identifier)-এর একটি নির্দিষ্ট ধরন যাতে আইডেন্টিফায়ার এবং অ্যাক্সেস পদ্ধতি উভয়ই অন্তর্ভুক্ত (scheme, যেমন https://)। সব URL হলো URI, কিন্তু সব URI URL নয়। urn:isbn:0451450523 এর মতো একটি URN হলো এমন URI যা সম্পদ পুনরুদ্ধারের পদ্ধতি নির্দিষ্ট না করে নাম দিয়ে সনাক্ত করে। ওয়েব ডেভেলপমেন্টে শব্দ দুটি প্রায়ই বিনিময়যোগ্যভাবে ব্যবহৃত হয় কারণ আপনি যে প্রায় সব URI দেখেন তাই URL।
URL কনস্ট্রাক্টর আপেক্ষিক URL কীভাবে পরিচালনা করে?
JavaScript URL কনস্ট্রাক্টর আপেক্ষিক পাথ পার্স করার সময় একটি বেস URL প্রয়োজন। new URL('/path?q=1') কল করলে TypeError throw হয়। বেস দিতে হবে: new URL('/path?q=1', 'https://example.com')। Python-এর urljoin এবং Go-এর url.ResolveReference একই উদ্দেশ্যে কাজ করে। এই টুলে একটি scheme সহ সম্পূর্ণ, পরম URL প্রত্যাশিত।
কোনো URL-এ পোর্ট নম্বর না থাকলে কী হয়?
পোর্ট বাদ দিলে, পার্সার port প্রপার্টির জন্য একটি খালি স্ট্রিং ফেরত দেয়। ব্রাউজার scheme-এর ডিফল্ট পোর্ট ধরে নেয়: https-এর জন্য 443, http-এর জন্য 80, ftp-এর জন্য 21। origin বা host প্রপার্টির মাধ্যমে কার্যকর পোর্ট অ্যাক্সেস করতে পারেন, কিন্তু port ফিল্ড নিজেই খালি থাকে কারণ কোনো স্পষ্ট পোর্ট নির্দিষ্ট করা হয়নি।
URL-এ Unicode অক্ষর থাকতে পারে কি?
হ্যাঁ, তবে পরিবহনের জন্য এনকোড করতে হবে। WHATWG URL Standard এটি স্বয়ংক্রিয়ভাবে পরিচালনা করে: আন্তর্জাতিক ডোমেইন নাম Punycode-এ (xn-- উপসর্গ) রূপান্তরিত হয়, এবং ASCII পরিসরের বাইরের পাথ/কোয়েরি অক্ষরগুলো পার্সেন্ট-এনকোড হয়। আপনি এই টুলে Unicode সহ একটি URL পেস্ট করলে, পার্স করা আউটপুটে স্বাভাবিক, ASCII-নিরাপদ সংস্করণ দেখতে পাবেন।
URL-এর সর্বাধিক দৈর্ঘ্য কত?
কোনো মানদণ্ড সর্বাধিক URL দৈর্ঘ্য নির্ধারণ করেনি — RFC 3986 এই বিষয়ে নীরব। ব্যবহারিকভাবে ব্রাউজারগুলো সীমা আরোপ করে: Chrome ঠিকানা বারে প্রায় 2MB পর্যন্ত সমর্থন করে, যেখানে Internet Explorer (পুরনো) এর 2,083-অক্ষরের সীমা ছিল। বেশিরভাগ ওয়েব সার্ভারের রিকোয়েস্ট লাইনের জন্য ডিফল্ট হলো 8KB (Nginx) বা 8KB (Apache)। বড় ডেটা পাঠাতে হলে query string-এর পরিবর্তে POST রিকোয়েস্ট বডি ব্যবহার করুন।
সম্পূর্ণ URL ছাড়া শুধু query string কীভাবে পার্স করব?
JavaScript-এ, একটি কাঁচা query string পার্স করতে new URLSearchParams('page=2&limit=10') ব্যবহার করুন। Python-এ urllib.parse.parse_qs('page=2&limit=10') ব্যবহার করুন। উভয়ই প্যারামিটার কী-মান জোড়া হিসেবে ফেরত দেয়। এটি তখন উপযোগী যখন আপনার কাছে query string আলাদাভাবে আছে — যেমন ফর্ম সাবমিশন বা এমন কোনো লগ এন্ট্রি থেকে যেখানে শুধু কোয়েরি অংশটুকু রেকর্ড হয়েছে।
URL পার্সিং কি URL ডিকোডিং-এর মতো?
না। URL পার্সিং একটি URL-কে কাঠামোগত উপাদানে (scheme, host, path, query, fragment) বিভক্ত করে। URL ডিকোডিং পার্সেন্ট-এনকোড করা অক্ষরকে তাদের মূল রূপে ফিরিয়ে দেয় (%20 হয় স্পেস, %26 হয় &)। দুটি অপারেশন পরিপূরক: সাধারণত প্রথমে URL পার্স করা হয়, তারপর পৃথক উপাদানের মান ডিকোড করা হয়। পার্সিংয়ের আগে ডিকোড করলে URL কাঠামো ভেঙে যেতে পারে কারণ ডিকোড করা & ও = বিভাজকগুলো ভুলভাবে ব্যাখ্যা হতে পারে।