मुझे एक पर्ल प्रोग्राम में कुछ HTTP यूआरएल को संभालने की ज़रूरत है, लेकिन मुझे संदेह है कि URI
कक्षा मुझे कैसे मदद करनी चाहिए।मुझे पर्ल यूआरआई कक्षा का उपयोग कैसे करना चाहिए?
विशेष रूप से, मैं संबंधित URL को हल करने और उनके घटकों को प्राप्त करने के लिए URI
कक्षा का उपयोग करना चाहता हूं। हालांकि, समस्याएं हैं:
मैं एक समारोह के दोनों
URI
वस्तुओं और तर्कों के रूप यूआरआई तार के साथ काम (या केवल एक ही पारित हो यह सुनिश्चित)sub foo_string_or_url { my $uri = URI->new(shift);
कि सही दृष्टिकोण है करने की आवश्यकता है? मुझे यह पसंद नहीं है, क्योंकि यह
URI
को स्ट्रिंग करता है और अनावश्यक रूप से नई वस्तु बनाता है।निकालें घटकों
my $host = $uri->host;
यह भी समस्याग्रस्त है, क्योंकि सभी
URI
रों, मेजबान है विशेष रूप से, अगर कोई कार्य करने के लिए कचरा गुजरता है, यह होगाdie()
।हल एक सापेक्ष URL
my $new_url = URI::URL->new($uri, $base)->abs;
IIUC,
->abs
बिना, परिणाम अभी भी सापेक्ष URL को stringify (औरHTTP::Request
रों लिए काम नहीं करेगा), मैं सही हूँ? इसके अलावा, क्या यहURI
वापस करने की गारंटी है?
मुझे इन समस्याओं को कैसे संभालना चाहिए? संभावनाओं
- उपयोग
->isa('URI')
और->can("host")
हर समय- त्रुटियों की संभावना है और मुझे लगता है बदसूरत हैं
- बिल्कुल
URI
वर्ग का उपयोग करें और regexes- का उपयोग करके URL पार्स न करें मैं अभी भी अपने खुद के
डीबग करने के बजाय लाइब्रेरी समाधान का उपयोग करूंगा
- लपेटें
URI
try { ... } catch { ... }
- में आपरेशन पहला बिंदु
देख वहाँ URI
वर्गों का उपयोग करने का एक समझदार, मूर्ख प्रूफ तरीका है? कुछ सरल मैंने नहीं सोचा है (उपरोक्त सूची में)?
केवल एक ही प्रश्न का उत्तर नहीं दिया गया है "मुझे इन समस्याओं को कैसे संभालना चाहिए?", और जवाब "हमेशा कॉल करें"। यदि आपके पास पहले से ही एक पूर्ण यूआरआई है तो यह कुछ भी नहीं करेगा। – ikegami