2010-09-02 10 views
15

मेरे पास मेरे कोड में एचटीएमएल आधारित प्रश्न हैं और एक विशिष्ट प्रकार सर्वर से 505 प्रतिक्रिया प्राप्त करने पर IOExceptions को जन्म देने लगता है। मैंने 505 प्रतिक्रियाओं को अन्य लोगों के साथ देखा है जो समान समस्याएं लगते थे। स्पष्ट रूप से 505 HTTP संस्करण विसंगति के लिए खड़ा है, लेकिन जब मैं किसी भी ब्राउज़र पर एक ही क्वेरी यूआरएल की प्रतिलिपि बनाता हूं (फ़ायरफ़ॉक्स, सीमोनकी और ओपेरा का प्रयास किया) तो कोई समस्या नहीं है। मेरे द्वारा पढ़ी गई पोस्टों में से एक ने सुझाव दिया है कि ब्राउज़र स्वचालित रूप से संस्करण मिलान समस्या को संभाल सकता है ..java.io.IOException: सर्वर HTTP प्रतिक्रिया कोड देता है 505

मैंने ओपेरा के साथ आने वाले अच्छे डेवलपर टूल का उपयोग करके गहराई से खोदने की कोशिश की है, और ऐसा लगता है कि इसमें कोई मेल नहीं है संस्करण (मुझे विश्वास है कि जावा HTTP 1.1 का उपयोग करता है) और एक अच्छी 200 OK प्रतिक्रिया प्राप्त होती है। जब मैं अपने जावा कोड के माध्यम से एक ही क्वेरी जाता हूं तो मुझे समस्याएं क्यों आती हैं?

 private InputStream openURL(String urlName) throws IOException{  
    URL url = new URL(urlName); 
    URLConnection urlConnection = url.openConnection(); 
    return urlConnection.getInputStream(); 
} 

नमूना लिंक: http://www.uniprot.org/uniprot/?query=mnemonic%3aNUGM_HUMAN&format=tab&columns=id,entry%20name,reviewed,organism,length

उत्तर

38

इसमें अंतरिक्ष से युक्त URL वाले बिलाव में कुछ मुद्दों पर किया गया है। समस्या को ठीक करने के लिए, आपको URLEncoder के साथ अपना यूआरएल एन्कोड करने की आवश्यकता है।

उदाहरण (अंतरिक्ष नोटिस):

String url="http://example.org/test test2/index.html"; 
String encodedURL=java.net.URLEncoder.encode(url,"UTF-8"); 
System.out.println(encodedURL); //outputs http%3A%2F%2Fexample.org%2Ftest+test2%2Findex.html 
+0

मुझे टॉमकैट 7.0.8 के साथ भी एक ही समस्या थी और पैरामीटर में से एक को एन्कोड करने की आवश्यकता थी। लेकिन वहां और भी है: अगर फ़ायरफ़ॉक्स के साथ किया गया तो अनुरोध टोमकैट द्वारा पूरी तरह से संभाला गया था! – Pragmateek

+0

धन्यवाद! मेरे पास एक ही समस्या थी और आपके उत्तर ने मेरी समस्या का समाधान किया। –

+3

मैंने अपने यूआरएल में रिक्त स्थान को% 20 के साथ बदल दिया। धन्यवाद, यह निश्चित समस्या – Chris

2

आप एक प्रॉक्सी के पीछे हैं? यह कोड मेरे लिए काम करता है और उसी ब्राउज़र को देखता है जो मैं ब्राउज़र के माध्यम से देखता हूं।

final URL url = new URL("http://www.uniprot.org/uniprot/?query=mnemonic%3aNUGM_HUMAN&format=tab&columns=id,entry%20name,reviewed,organism,length"); 
final URLConnection conn = url.openConnection(); 
final InputStream is = conn.getInputStream(); 
System.out.println(IOUtils.toString(is)); 

conn www.uniprot.org पर एक डेवलपर मैं अनुरोध लॉग में देखने के लिए सक्षम होने का लाभ है के रूप में HttpURLConnection

+0

जहां तक ​​मुझे पता है, यहां कोई प्रॉक्सी नहीं है .. मैंने यहां लिखा है सरलीकृत केस की कोशिश की है और ऐसा लगता है कि यह मेरे लिए भी काम करता है, अजीब .. फिर से पूर्णस्क्रीन परीक्षण को चलाने के लिए यह देखने के लिए कि क्या समस्या अभी भी बनी हुई है, हालांकि परिणाम देखने में काफी समय लगता है .. अगर मुझे अभी भी अपवाद मिलता है, तो मैं स्टैक ट्रेस के साथ पोस्ट अपडेट करूंगा .. – posdef

8

का एक उदाहरण है। पिछले साल लॉग के अनुसार हमने 505 प्रतिक्रिया कोड नहीं भेजा है। किसी भी मामले में हमारे सर्वर http 1 अनुरोधों के साथ-साथ डिफ़ॉल्ट http1.1 को समझते हैं (हालांकि आपको वह परिणाम नहीं मिलेंगे जो आप उम्मीद करते हैं)।

इससे मुझे संदेह होता है कि रास्ते में किसी प्रकार का डेटा भ्रष्टाचार था। या आप जहां हार्डवेयर विफलता से प्रभावित होते हैं (हाल ही में हमें एक स्विच और एक संपूर्ण डेटासेंटर के साथ कुछ परेशानी हुई है;)। किसी भी मामले में यदि आपके पास uniprot.org के साथ कभी प्रश्न या समस्याएं हैं तो कृपया [email protected] से संपर्क करें, फिर हम देख सकते हैं कि हम समस्या को हल/ठीक कर सकते हैं या नहीं।

आपका कोड स्निपेट सामान्य लगता है और काम करना चाहिए।

सादर, Jerven Bolleman

+0

हाय जेर्वेन, धन्यवाद आपके उत्तर के लिए बहुत कुछ, भले ही यह मेरे भ्रम में जोड़ता है (तथ्य यह है कि आपने कभी 505 नहीं भेजा है) यह सराहना की जाती है कि आपने लॉग के माध्यम से जाने के लिए अपना समय लिया, और संभावित कारणों को ट्रैक करने का प्रयास किया। हालांकि मैंने कुछ दिनों पहले हेल्पडेस्क को एक मेल भेजा है, जब मैंने पहली बार समस्या का सामना करना शुरू कर दिया था और अभी भी कोई जवाब नहीं मिला है। मैंने सोचा कि वहां कई सारे मुद्दे हैं जिन पर आपको शायद भाग लेने की ज़रूरत है, इसलिए मैं यह सुनिश्चित करना चाहता था कि मेरे अंत में कुछ भी हो सकता है। :) – posdef

3
URL वर्ग के लिए API दस्तावेज़ों से

:

यूआरएल वर्ग ही एन्कोड नहीं करता या किसी URL में घटक डिकोड [... ]। किसी भी फ़ील्ड को एन्कोड करने के लिए कॉलर की ज़िम्मेदारी है, जिसे यूआरएल कॉल करने से पहले भागने की जरूरत है, और यूआरएल से वापस आने वाले से बचने वाले फ़ील्ड को डीकोड करने की भी आवश्यकता है।

ताकि आप इसे नया URL (यूआरएल-str)

2

@posdef मैं एक ही HTTP त्रुटि कोड हो रही थी 505 समस्या कॉल करने से पहले आपके url-str एनकोड में कोई रिक्ति है। जब मैंने यूआरएल चिपकाया कि मैं फ़ायरफ़ॉक्स में जावा कोड में उपयोग कर रहा था, तो क्रोम ने काम किया। लेकिन कोड के माध्यम से IOException दे रहा था।लेकिन आखिर में मुझे पता चला कि यूआरएल स्ट्रिंग में ब्रैकेट्स '(' और ')' थे, उन्हें हटाकर यह काम करता था, ऐसा लगता है कि मुझे ब्राउजर की तरह यूआरएलएनकोडिंग की आवश्यकता है।

+0

मुझे ब्राउज़र की तरह URLENcodeing की आवश्यकता थी। (मुझे एक ही समस्या का सामना करना पड़ता है) –

संबंधित मुद्दे