2013-02-13 46 views
5

यह शेल कमांड के साथ 403 त्रुटि पुन: प्राप्त करने के लिए robots.txt सफल होता हैHTTP मशीनीकरण

$ curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 (compatible;)" http://fifa-infinity.com/robots.txt 

और robots.txt प्रिंट करता है। उपयोगकर्ता-एजेंट विकल्प को सर्वर से 403 त्रुटि में छोड़ना परिणाम। Robots.txt फ़ाइल का निरीक्षण करने से पता चलता है कि क्रॉलिंग के लिए http://www.fifa-infinity.com/board के तहत सामग्री की अनुमति है। हालांकि, निम्नलिखित में विफल रहता है (अजगर कोड):

import logging 
import mechanize 
from mechanize import Browser 

ua = 'Mozilla/5.0 (X11; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 (compatible;)' 
br = Browser() 
br.addheaders = [('User-Agent', ua)] 
br.set_debug_http(True) 
br.set_debug_responses(True) 
logging.getLogger('mechanize').setLevel(logging.DEBUG) 
br.open('http://www.fifa-infinity.com/robots.txt') 

और मेरे कंसोल पर उत्पादन होता है:

No handlers could be found for logger "mechanize.cookies" 
send: 'GET /robots.txt HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: www.fifa-infinity.com\r\nConnection: close\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 (compatible;)\r\n\r\n' 
reply: 'HTTP/1.1 403 Bad Behavior\r\n' 
header: Date: Wed, 13 Feb 2013 15:37:16 GMT 
header: Server: Apache 
header: X-Powered-By: PHP/5.2.17 
header: Vary: User-Agent,Accept-Encoding 
header: Connection: close 
header: Transfer-Encoding: chunked 
header: Content-Type: text/html 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/moshev/Projects/forumscrawler/lib/python2.7/site-packages/mechanize/_mechanize.py", line 203, in open 
    return self._mech_open(url, data, timeout=timeout) 
    File "/home/moshev/Projects/forumscrawler/lib/python2.7/site-packages/mechanize/_mechanize.py", line 255, in _mech_open 
    raise response 
mechanize._response.httperror_seek_wrapper: HTTP Error 403: Bad Behavior 

अजीब, में उपयोगकर्ता-एजेंट परिणाम की स्थापना के बिना कर्ल का उपयोग कर "403: निषिद्ध" बल्कि "403: खराब व्यवहार" से।

क्या मैं किसी भी तरह से कुछ गलत कर रहा हूं, या यह मशीनी/urllib2 में एक बग है? मुझे नहीं लगता कि कैसे आसानी से robots.txt हो रहा है "बुरा व्यवहार" हो सकता है?

+0

और शीर्ष लेख का एक और उदाहरण बुरा चला सूँघने। दूसरी तरफ सर्वर यूए एजेंट को और अधिक देख रहा है, जांचें कि हेडर 'कर्ल' क्या भेज रहा है, उन्हें 'मशीनीज' का उपयोग, समायोजन, राइंस, दोहराने के लिए तुलना करें। यह एक पायथन समस्या नहीं है * नहीं। –

+0

यह समस्या [urllib2.HTTPError: HTTP त्रुटि 403: निषिद्ध] के समान दिखती है (https://stackoverflow.com/questions/13303449/urllib2-httperror-http-error-403-forbidden/46213623#46213623) – djinn

उत्तर

9

प्रयोग द्वारा सत्यापित किए जाने के अनुसार, आपको स्वीकार्य सामग्री प्रकार निर्दिष्ट करने के लिए Accept शीर्षलेख जोड़ने की आवश्यकता है (जब भी "स्वीकार्य" हेडर मौजूद है, तब तक कोई भी प्रकार करेगा)। उदाहरण के लिए, यह बदलने के बाद काम करेंगे:

br.addheaders = [('User-Agent', ua)] 

रहे हैं:

br.addheaders = [('User-Agent', ua), ('Accept', '*/*')] 
+0

धन्यवाद, वह यह था! – Moshev

+0

मेरी इच्छा है कि मैंने इसे पहले देखा था ... यह मुझे काम के घंटे बचा लेगा! धन्यवाद हुई! –