2013-02-13 39 views
5

lệnh shell này thành côngHTTP 403 lỗi lấy robots.txt với mechanize

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

và in robots.txt. Bỏ qua tùy chọn tác nhân người dùng sẽ dẫn đến lỗi 403 từ máy chủ. Kiểm tra tệp robots.txt cho biết rằng nội dung dưới http://www.fifa-infinity.com/board được phép thu thập dữ liệu. Tuy nhiên, sau thất bại (mã python):

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') 

Và sản lượng trên giao diện điều khiển của tôi là:

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 

Kỳ lạ thay, sử dụng curl mà không cần thiết lập các kết quả user-agent trong "403: Forbidden" hơn hơn "403: Hành vi xấu".

Tôi đang làm gì đó sai, hoặc là lỗi này trong cơ giới hóa/urllib2? Tôi không thấy cách đơn giản nhận được robots.txt có thể là "hành vi xấu"?

+0

Và một ví dụ về tiêu đề đánh hơi xấu đi. Các máy chủ ở phía bên kia đang xem xét nhiều hơn rằng các đại lý UA, kiểm tra những gì tiêu đề 'curl' được gửi, so sánh chúng với những gì' mechanize' đang sử dụng, điều chỉnh, rince, lặp lại. Đây là * không * một vấn đề python. –

+0

Vấn đề này trông rất giống với [urllib2.HTTPError: Lỗi HTTP 403: Bị cấm] (https://stackoverflow.com/questions/13303449/urllib2-httperror-http-error-403-forbidden/46213623#46213623) – djinn

Trả lời

9

Khi được xác minh bằng thử nghiệm, bạn cần thêm tiêu đề Accept để chỉ định loại nội dung có thể chấp nhận được (bất kỳ loại nào sẽ làm, miễn là tiêu đề "Chấp nhận" tồn tại). Ví dụ, nó sẽ làm việc sau khi thay đổi:

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

tới:

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

Cảm ơn, Điều đó là vậy đó! – Moshev

+0

Tôi ước gì tôi đã thấy điều này sớm hơn ... Nó sẽ giúp tôi tiết kiệm thời gian làm việc! Cảm ơn Hui! –

Các vấn đề liên quan