Python urllib2: Đọc nội dung ngay cả trong ngoại lệ HTTPError?


76

Tôi đang sử dụng urllib2 để tìm nạp trang aa qua HTTP. Đôi khi tài nguyên ném ra lỗi HTTP 400 (Yêu cầu không hợp lệ) khi yêu cầu của tôi có lỗi. Tuy nhiên, phản hồi đó cũng chứa một phần tử XML đưa ra thông báo lỗi chi tiết. Sẽ rất hữu ích nếu có thể thấy lỗi đó thay vì chỉ là ngoại lệ HTTPError do urllib2 trả về.

Làm cách nào để trả lại nội dung tài liệu mặc dù có ngoại lệ?


Câu trả lời:


53

Bạn có thể coi lỗi như một phản hồi.

http://www.voidspace.org.uk/python/articles/urllib2.shtml#httperror

Khi có lỗi, máy chủ sẽ phản hồi bằng cách trả về mã lỗi HTTP và trang lỗi. Bạn có thể sử dụng phiên bản HTTPError làm phản hồi trên trang được trả về. Điều này có nghĩa là cũng như thuộc tính mã, nó cũng có các phương thức read, geturl và info.


87
import urllib2
try:
    request = urllib2.Request('http://www.somesite.com')
    response = urllib2.urlopen(req)
except urllib2.HTTPError as e:
    error_message = e.read()
    print error_message

0

Bạn có thể readthông báo phản hồi từ ngoại lệ HTTPError.

Ví dụ Python3

import urllib.request

try:
    request = urllib.request.Request('http://httpstat.us/418', headers={'Accept': 'text/plain', 'User-Agent': ''})
    with urllib.request.urlopen(request) as page:
        print('success: ' + page.read().decode())
except urllib.error.HTTPError as httpError:
        error = httpError.read().decode()
        print('error: ' + error)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.