2013-07-30 5 views
6

किसी कारण से मुझे HTTP Error 403: Forbidden मिलता है जब मैं पृष्ठ http://questionablecontent.net खोलने का प्रयास करता हूं। मुझे robots.txt त्रुटि मिलती थी, लेकिन इसे हल किया गया है। इसके अतिरिक्त, मैं उनकी robots.txt फ़ाइल भी नहीं ढूंढ सकता।मशीनीकरण HTTP 403 त्रुटि को फेंक रहा है क्यों?

मैं अभी भी क्रोम से वेबपृष्ठ देख सकता हूं, इसलिए मैं क्या सोच रहा हूं: उचित हेडर सेट करने के बाद भी क्रोम से मशीनीकरण अलग दिखता है?

br = mechanize.Browser() 
cj = cookielib.LWPCookieJar() 
br.set_cookiejar(cj) 
br.set_handle_equiv(True) 
br.set_handle_redirect(True) 
br.set_handle_robots(False) 
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) 
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')] 

मैं भी अपने ब्राउज़र के रूप में ही हेडर को addheaders स्थापित करने की कोशिश की (जो मैं here पाया जाता है):

br.addheaders = [('User-agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36')] 

यहाँ मेरी कोड (जो काम नहीं करता है) है। .. लेकिन वह भी काम नहीं किया।

अंत में, मैंने सेलेनियम का उपयोग करने की कोशिश की और यह काम किया, क्योंकि यह क्रोम में पृष्ठ लोड करता है और फिर पायथन के साथ संचार करता है। हालांकि, मैं अभी भी इसे मशीनीकरण के साथ काम करना चाहता हूं। साथ ही, मैं अभी भी अनिश्चित हूं कि कैसे क्रोम और मैकेनाइजेशन उनके सर्वर के लिए अलग दिखते हैं।

+0

आपका प्रश्न वास्तव में मेरी मदद करता है और मेरी समस्या हल करता है! बहुत बहुत धन्यवाद – Clement

उत्तर

4

चाल शायद उपयोगकर्ता हेडर से अलग अनुरोध हेडर सेलेनियम भेज रही है, कुछ सर्वर अन्य शीर्षकों की जांच भी करते हैं ताकि यह सुनिश्चित किया जा सके कि वास्तविक ब्राउज़र उनसे बात कर रहा है। मेरे पुराने जवाब में से एक को देखो:

urllib2.HTTPError: HTTP Error 403: Forbidden

अपनी जगह में, मैं सभी हेडर तुम्हारा असली क्रोम ब्राउज़र भेजता जोड़ने की कोशिश करेंगे, और फिर अनावश्यक को खत्म करने।

+0

यह अजीब बात है, मैंने अपना कोड बदलने के बिना 403 त्रुटि प्राप्त करना बंद कर दिया। हालांकि मैंने अपनी वेबसाइट पर यह कोड इस्तेमाल किया था और यह काम करता था, इसलिए मुझे लगता है कि कुछ अंत में कुछ बदल रहा था। मैं चले गए और बिना अतिरिक्त मामले में अतिरिक्त शीर्षलेख जोड़े। –

+0

स्पष्टता के लिए, अगर मैं उन सभी शीर्षकों को भेजता हूं जो मेरा असली क्रोम ब्राउज़र भेजता है, तो क्या यह ठीक उसी तरह दिखता है जैसे मेरा क्रोम ब्राउज़र अनुरोध भेज रहा था? क्या कुछ और चल रहा है? –

+0

यदि आप सभी प्राप्त कुकीज़ को वापस भेजते हैं, और सभी शीर्षलेख जो एक वास्तविक ब्राउज़र भेजता है, तो यह निश्चित रूप से दिखाई देगा। एकमात्र चीज जो अंतर डाल सकती है वह जावास्क्रिप्ट है। पृष्ठ जो भारी AJAX आधारित होते हैं, अक्सर अनुरोध भेजने से पहले क्लाइंट पक्ष पर कुछ डेटा/कुकी संशोधनों को करते हैं, और यह "रिवर्स इंजीनियर" के लिए कठिन हो सकता है और कच्चे अनुरोधों के साथ व्यवहार को अनुकरण कर सकता है। उन मामलों में उदाहरण के लिए पायसाइड/पीईक्यूटी के क्यूटीवेबकिट मॉड्यूल का उपयोग करके सेलेनियम जैसे वेबड्राइवर का उपयोग करना बेहतर है या स्क्रैच से एक लिखना बेहतर है। – andrean

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