2010-05-08 19 views
8

के लिए मैं आरएसएस लाने के लिए पुस्तकालय rome.dev.java.net का उपयोग करता हूं।java.io.FileNotFoundException वैध यूआरएल

कोड आप देख सकते हैं कि http://planet.rubyonrails.ru/xml/rss मान्य URL है और पेज ब्राउज़र में दिखाया गया है

URL feedUrl = new URL("http://planet.rubyonrails.ru/xml/rss"); 
SyndFeedInput input = new SyndFeedInput(); 
SyndFeed feed = input.build(new XmlReader(feedUrl)); 

है।

लेकिन मैं अपने आवेदन

java.io.FileNotFoundException: http://planet.rubyonrails.ru/xml/rss 
     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1311) 
     at com.sun.syndication.io.XmlReader.<init>(XmlReader.java:237) 
     at com.sun.syndication.io.XmlReader.<init>(XmlReader.java:213) 
     at rssdaemonapp.ValidatorThread.run(ValidatorThread.java:32) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:619) 

मैं किसी भी प्रॉक्सी का उपयोग नहीं करते से अपवाद मिलता है। मुझे अपने पीसी और उत्पादन सर्वर पर यह अपवाद मिलता है और केवल इस यूआरएल के लिए, अन्य यूआरएल काम कर रहे हैं।

उत्तर

3

मुझे संदेह है कि यह जावा पसंद नहीं है। आपको अपने "उपयोगकर्ता-एजेंट" शीर्षलेख को नकली करने की आवश्यकता है, यह सुनिश्चित न करें कि यह आपकी आरएसएस लाइब्रेरी के साथ काम करने योग्य है या नहीं।

एक और सुझाव यह है कि आप डेटा को स्वयं प्राप्त करते हैं और डेटा को फ़ीड रीडर को खिलाते हैं।

7

कोड है कि अपवाद फेंक रहा है इस तरह दिखता है ... यह सोचते हैं मैं सही संस्करण मिल गया है:

if (respCode >= 400) { 
    if (respCode == 404 || respCode == 410) { 
     throw new FileNotFoundException(url.toString()); 
    } else { 
     throw new java.io.IOException(
      "Server returned HTTP" 
      + " response code: " + respCode 
      + " for URL: " + url.toString()); 
    } 
} 

दूसरे शब्दों में, जब आप जावा से प्राप्त कर रहे हैं, तो आप एक हो रही है 404 या 410 प्रतिक्रिया। अब जब मैं wget उपयोगिता का उपयोग कर अनुरोध करता हूं, तो मुझे 200 प्रतिक्रिया मिलती है। तो मेरा अनुमान है कि समस्या निम्न में से एक है:

  • जब आप कुछ कॉन्फ़िगरेशन समस्या से पीड़ित थे तो आप अनुरोध करने के लिए गए थे।
  • उन्होंने अपने सर्वर को कुछ उपयोगकर्ता-एजेंट तारों के लिए 404/410 वापस करने के लिए लागू किया है।

अन्य संभावनाएं हैं कि वे आईपी पते पर किसी प्रकार का सर्वर-साइड फ़िल्टरिंग कर रहे हैं या कुछ DNS समस्या है जो आपके अनुरोधों को एक अलग आईपी पते पर जाने का कारण बन रही है। लेकिन इनमें से दोनों इस तथ्य से विरोधाभास प्रतीत होते हैं कि आप अपने ब्राउज़र में फ़ीड तक पहुंच सकते हैं।

यदि यह उपयोगकर्ता-एजेंट है, तो यह देखने के लिए कि उनकी साइट/आरएसएस फ़ीड के कुछ प्रकार के उपयोग पर प्रतिबंध लगा दिया गया है, उनकी सेवा की शर्तों पर नज़र डालें।

+0

मैंने अपचा एचटीपी क्लाइंट का उपयोग करके पृष्ठ प्राप्त करने का प्रयास किया और यह काम करता है! मेरा जवाब देखें – Alexei

4

मैं इस कोड

HttpClient httpClient = new DefaultHttpClient(); 
HttpGet pageGet = new HttpGet(feedUrl.toURI()); 
HttpResponse response = httpClient.execute(pageGet); 
SyndFeedInput input = new SyndFeedInput(); 
SyndFeed feed = input.build(new XmlReader(response.getEntity().getContent())); 

यह काम करता है की कोशिश की! आपके सुझावों के लिए धन्यवाद। ऐसा लगता है कि यह उपयोगकर्ता-एजेंट के बारे में है।