簡體   English   中英

如何從請求響應中提取 HTTP 錯誤文本?

[英]How to extract the HTTP error text from a requests response?

我有以下代碼:

    tries = 10
    for n in range(tries):
        try:
            ....
            responsedata = requests.get(url, data=data, headers=self.hed, verify=False)
            responsedata.raise_for_status()
            ..
            if .... : 
                break   #exit loop condition

        except (ChunkedEncodingError, requests.exceptions.HTTPError) as e:
            print ("page #{0} run #{1} failed. Returned status code {2}. Msg: {3}. Retry.".format(page, n, responsedata.status_code, sys.exc_info()[0]))
            if n == tries - 1:
               raise e  # exit the process

我看到的印刷品是:

page #53 run #0 failed. Returned status code 502. Msg: <class 'requests.exceptions.HTTPError'>. Retry.
page #1 run #1 failed. Returned status code 500. Msg: <class 'requests.exceptions.ChunkedEncodingError'>. Retry.

雖然這很好,但它並沒有給我關於這個問題的實際信息。 該消息只是告訴我異常標題。

如果我在異常發生時打印: responsedata.text ,我會看到:

 Returned status code 502. Message is: ...
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>502 - Web server received an invalid response while acting as a gateway or proxy server.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;}
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
...

這是一個巨大的消息,其中大部分是垃圾,但它也說: 502 - Web server received an invalid response while acting as a gateway or proxy server. 我可以訪問此消息並將其打印到我的日志中嗎?

您可以使用responsedata.status_code及其文本描述通過responsedata.reason訪問響應的狀態代碼(請參閱http://docs.python-requests.org/en/master/api/中的更多內容)

如果您的端點在響應正文中返回詳細的、特定於應用程序的錯誤消息,您可以利用以下事實:請求HTTPError保留對導致它被引發的Response的引用:

from requests.exceptions import HTTPError

try:
    # Some code that makes requests
except HTTPError as e:
    print(e.response.text)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM