日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python requests请求失败重试_Python Requests.post()请求失败时的retry设置

發(fā)布時間:2024/8/1 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python requests请求失败重试_Python Requests.post()请求失败时的retry设置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 問題描述

通常,我們在做爬蟲工作或遠程接口調(diào)用的過程中,往往由于訪問頻率過快等原因遇到連接超時的報錯問題,利用最近調(diào)用api.ai.qq.com某個接口舉例如下:

Traceback (most recent call last):

: HTTPSConnectionPool(host='api.ai.qq.com', port=443):

Max retries exceeded with url: /fcgi-bin/nlp/nlp_textpolar (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 504 Gateway Time-out',)))

<==>用代碼格式顯示更為清晰:

Traceback (most recent call last):

: HTTPSConnectionPool(host='api.ai.qq.com', port=443):

Max retries exceeded with url: /fcgi-bin/nlp/nlp_textpolar (Caused by ProxyError('Cannot connect to proxy.',

OSError('Tunnel connection failed: 504 Gateway Time-out',)))

之前寫爬蟲時候為了快速解決問題就寫了一堆的while與try來實現(xiàn)鏈接的重新訪問,這種方式可以在一定程度上解決問題,但回看自己的代碼時候總覺得奇丑無比,今天在做一個遠程接口調(diào)用時候又遇到這個報錯,想著python的requests模塊中一定有內(nèi)置方法來解決這個問題,于是便嘗試了一下,但同時又引發(fā)了另一個小問題,遂決定記錄一下。

2. 解決方案

其實,我們在http請求中遇到連接超時導致訪問中斷的情況時,往往不需要自己來寫重訪問策略,requests模塊中有對應(yīng)的重訪問設(shè)置,可以通過設(shè)置最大重訪問次數(shù),當一次訪問失敗時,會自動進行重新訪問,實現(xiàn)方式(簡化)如下:

import requests

from requests.adapters import HTTPAdapter

from requests.packages.urllib3.util import Retry

s = requests.Session()

s.mount('https://', HTTPAdapter(max_retries=Retry(total=5)))

resp_get = s.get(url=http_url, data={'key':'value'})

resp_post = s.post(url=http_url, data={'key':'value'})

可以看到,我們設(shè)置最大重訪問次數(shù)為5。但此時會發(fā)現(xiàn),如果我們使用的是get()方法的話則沒有問題,但如果使用post()方法的話仍然會報錯。通過查資料發(fā)現(xiàn),python的requests模塊使用的urllib3,而urllib3默認對post()方法不設(shè)置重訪問,因此需要我們手動指定才可以,修改如下:

import requests

from requests.adapters import HTTPAdapter

from requests.packages.urllib3.util import Retry

s = requests.Session()

s.mount('https://', HTTPAdapter(max_retries=Retry(total=5, method_whitelist=frozenset(['GET', 'POST'])))) # 設(shè)置 post()方法進行重訪問

resp_get = s.get(url=http_url, data={'key':'value'})

resp_post = s.post(url=http_url, data={'key':'value'})

這樣再使用requests.post()時幾乎不會出現(xiàn)超時中斷的情況了!

參考文獻

https://stackoverflow.com/questions/35704392/how-to-make-python-post-requests-to-retry

https://www.biaodianfu.com/python-requests-retry.html

總結(jié)

以上是生活随笔為你收集整理的python requests请求失败重试_Python Requests.post()请求失败时的retry设置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。