Conas Atmaisféar Iarratais a chur i bhfeidhm i Python

Tuairimí: 0

Is modh éifeachtach é scríobadh gréasáin chun sonraí a bhaint as an ngréasán. Is fearr le go leor forbróirí an leabharlann Python a úsáid chun tionscadail scríobtha gréasáin a dhéanamh mar go bhfuil sé simplí agus éifeachtach. Mar sin féin, tá sé iontach mar atá, tá a theorainneacha ag an leabharlann iarratais. Fadhb tipiciúil amháin is féidir linn a bheith i gceist i scríobadh gréasáin is ea iarratais theip, a mbíonn eastóscadh sonraí éagobhsaí mar thoradh air go minic. San Airteagal seo, rachaimid tríd an bpróiseas chun iarrachtaí iarratais a chur i bhfeidhm i Python, ionas gur féidir leat na hearráidí HTTP a láimhseáil agus do scripteanna scríobtha gréasáin a choinneáil cobhsaí agus iontaofa.

Ag tosú leis an Leabharlann Iarrataí

Cuirimid ár dtimpeallacht ar bun ar dtús. Bí cinnte go bhfuil python suiteáilte agat agus aon IDE de do rogha féin. Ansin suiteáil an leabharlann iarratais mura bhfuil sé agat cheana féin.

pip install requests

Nuair a bheidh sé suiteáilte, déanaimis iarratas a sheoladh chuig sampla.com ag baint úsáide as modúl iarratais Python. Seo feidhm shimplí a dhéanann sin go díreach:

import requests

def send_request(url):
    """
Seolann sé iarratas HTTP Get chuig an URL sonraithe agus priontálann sé an cód stádais freagartha.    
    Parameters:
        url (str): An URL chun an t -iarratas a sheoladh chuig.
    """
    response = requests.get(url)
    print('Response Status Code: ', response.status_code)

send_request('https://example.com')

Taispeántar an t -aschur cód thíos:

How to implement request retries in Python.png

Déanaimis súil níos dlúithe ar chóid stádais HTTP chun iad a thuiscint níos fearr.

Tuiscint a fháil ar chóid stádais http

Freagraíonn an freastalaí d'iarratas HTTP le cód stádais a léiríonn toradh an iarratais. Seo an t -uafás tapaidh:

  1. 1xx (faisnéis): Fuarthas an t -iarratas agus leanann sé ar aghaidh ag próiseáil.
  2. 2xx (Rath): Fuarthas, tuigtear, agus glacadh leis an iarraidh.
    • 200 ceart go leor: d'éirigh leis an iarraidh. Is é seo solas glas na gcód stádais HTTP.
  3. 3xx (atreorú): Tá gá le gníomhaíocht bhreise chun an t -iarratas a chomhlánú.
  4. 4xx (Earráid an Chliaint): Bhí earráid leis an iarratas, go minic mar gheall ar rud ar an taobh cliant.
  5. 5xx (Earráid an Fhreastalaí): Theip ar an bhfreastalaí iarratas bailí a chomhlíonadh mar gheall ar earráid ar a dheireadh.
    • 500 Earráid Freastalaí Inmheánach: Ní raibh an freastalaí in ann an t -iarratas a chomhlánú. Léiríonn sé seo gur tháinig an freastalaí ar choinníoll gan choinne a chuir cosc ​​air an t -iarratas a chomhlíonadh. Is é seo an cód stádais HTTP atá coibhéiseach leis an solas tráchta dearg.
    • 504 Timeout Gateway: Ní bhfuair an freastalaí freagra ón bhfreastalaí in aghaidh srutha in am. Is é seo an cód stádais HTTP atá cothrom le solas tráchta an tseomra feithimh.

Mar shampla, ciallaíonn an cód stádais 200 gur críochnaíodh an t -iarratas chuig https://example.com. Is é an bealach atá ag an bhfreastalaí a rá, "Tá gach rud go maith anseo, d'éirigh go maith le d'iarratas".

Is féidir leis na cóid stádais seo ról a imirt freisin i mbrath bot agus a léiriú nuair a bhíonn rochtain srianta mar gheall ar iompar cosúil le bot.

Anseo thíos tá cóid earráide HTTP a tharlaíonn go príomha mar gheall ar shaincheisteanna braite agus fíordheimhnithe bot.

  1. 429 An iomarca iarratais: Léiríonn an cód stádais seo gur sheol an t -úsáideoir an iomarca iarrataí in am ar leith (“Teorainn Ráta”). Is freagairt choiteann é nuair a sháraíonn na róbónna teorainneacha iarratais réamhshainithe.
  2. 403 Toirmiscthe: Cuirtear an cód seo ar ais nuair a dhiúltaíonn an freastalaí an t -iarratas a chomhlíonadh. Féadann sé seo tarlú má tá amhras ar an bhfreastalaí go bhfuil an t-iarratas ag teacht ó bot, bunaithe ar ghníomhaire úsáideora nó critéir eile.
  3. 401 neamhúdaraithe: D'fhéadfaí an stádas seo a úsáid má éilíonn rochtain ar fhíordheimhniú nach bhfuil ag an bot.
  4. 503 Seirbhís nach bhfuil ar fáil: Uaireanta úsáidtear é chun a léiriú nach bhfuil an freastalaí in ann an t -iarratas a láimhseáil go sealadach, a d'fhéadfadh tarlú le linn spíceanna tráchta uathoibrithe.

Meicníocht Aettry a chur i bhfeidhm i Python

Lig dúinn anois meicníocht shimplí a scríobh i Python chun iarratas HTTP a dhéanamh leis an Leabharlann Iarrataí. Tá amanna ann nuair a theipeann ar iarratais líonra mar gheall ar fhadhb áirithe líonra nó ró -ualach freastalaí. Mar sin má theipeann ar ár n -iarratas, ba cheart dúinn na hiarratais seo a atriail.

Meicníocht bhunúsach atriallacha

Fágann an fheidhm Send_Request_With_Basic_retry_MeChanism iarratais a fháil ar URL ar leith le meicníocht bhunúsach atriallacha i bhfeidhm nach ndéanfadh ach athuair má bhíonn eisceacht nó eisceacht mar earráid nasctha ann. Dhéanfadh sé an t -iarratas a ath -uasmhéid uasta ama. Má theipeann ar gach iarracht le heisceacht den sórt sin, ardaíonn sé an eisceacht dheireanach.

import requests
import time

def send_request_with_basic_retry_mechanism(url, max_retries=2):
    """
    Seolann sé iarratas HTTP GET chuig URL le meicníocht bhunúsach atreoraithe.
    
    Parameters:
        url (str): An URL chun an t -iarratas a sheoladh chuig.
        max_retries (int): An líon uasta uaireanta chun an t -iarratas a atriail.
    Raises:
        requests.RequestException: Ardaíonn sé an eisceacht dheireanach má theipeann ar gach atriall.

    """
    for attempt in range(max_retries):
        try:
            response = requests.get(url)
            print('Response status: ', response.status_code)
            break # Lúb Scoir Má éiríonn go maith leis
        except requests.RequestException as error:
            print(f"Attempt {attempt+1} failed:", error)
            if attempt < max_retries - 1:
                print(f"Retrying...")
                time.sleep(delay)  # Fan roimh athrá
            else:
                print("Max retries exceeded.")
               # Athdhearbhaigh an eisceacht dheireanach má shroicheann uas-athsheachadáin
                raise
                send_request_with_basic_retry_mechanism('https://example.com')

Réamh -Mheicníocht ATHCHÓIRIÚ

Tá an mheicníocht bhunúsach athfhillte á n -oiriúnú anois chun cásanna a láimhseáil ina bhfuil an láithreán gréasáin ag iarraidh a chur i bhfeidhm meicníochtaí braite bot a bhféadfadh blocáil a bheith mar thoradh orthu. Chun aghaidh a thabhairt ar chásanna den sórt sin, ní mór dúinn an t -iarratas a athinsint go díograiseach i gcónaí, mar ní féidir leo a bheith ina mbloic bhrath bot ach d'fhéadfadh siad a bheith mar gheall ar fhadhbanna líonra nó freastalaí freisin.

Seolann an fheidhm thíos Send_Request_With_Advance_retry_Mechanism iarraidh HTTP Get Get chuig an URL a sholáthraítear le hiarrachtaí roghnacha atriallacha agus moill a athsheoladh. Déanann sé iarracht an t -iarratas a sheoladh arís agus arís eile don líon sonraithe iarrachtaí agus priontaí an cód stádais freagartha má fhaigheann an t -iarratas an freagra go rathúil. Má bhíonn earráid ann le linn na hoibríochta iarratais, priontálann sé an teachtaireacht earráide agus déanann sé é a aisghairm. Fanann sé leis an moill atreoraithe sonraithe idir gach iarracht. Má theipeann ar an iarraidh fiú tar éis líon sonraithe na n -iarrachtaí atriallacha, ardaíonn sé an eisceacht dheireanach a tháinig chun cinn.

Tá an paraiméadar moille tábhachtach mar go seachnaíonn sé an freastalaí a bhomrú le hiarratais iomadúla ag eatramh dlúth. Ina áit sin, fanann sé go mbeadh go leor ama ag an bhfreastalaí chun an t -iarratas a phróiseáil, rud a fhágann go bhfuil an freastalaí ag smaoineamh go bhfuil duine agus gan bot ag déanamh na n -iarratas. Mar sin, ba cheart moill a chur ar an meicníocht athfhillte chun ró-ualach freastalaí nó freagra freastalaí mall a sheachaint a d'fhéadfadh meicníochtaí frith-bot a spreagadh.

import requests
import time

def send_request_with_advance_retry_mechanism(url, max_retries=3, delay=1):
    """
   Seolann sé iarratas HTTP GET chuig an URL sonraithe le meicníocht ardtréimhsithe.
    
    Parameters:
        url (str): An URL chun an t -iarratas a sheoladh chuig.
        max_retries (int): An líon uasta uaireanta chun an t -iarratas a atriail. Is é an réamhshocrú ná 3.
        delay (int): An mhoill (i soicindí) idir atrialacha. Is é an réamhshocrú ná 1.

    Raises:
        requests.RequestException: Ardaíonn sé an eisceacht dheireanach má theipeann ar gach atriall.
    """
    for attempt in range(max_retries):
        try:
            response = requests.get(url)
           # Eisceacht a ardú do chóid stádais 4xx nó 5xx
            response.raise_for_status()
            print('Response Status Code:', response.status_code)
        except requests.RequestException as e:
            # Priontáil teachtaireacht earráide agus uimhir iarracht má theipeann ar an iarraidh
            print(f"Attempt {attempt+1} failed:", e)
            if attempt < max_retries - 1:
                # Priontáil an teachtaireacht athfhillte agus fan sula ndéantar é a athrá
                print(f"Retrying in {delay} seconds...")
                time.sleep(delay)
            else:
               # Má sháraigh an t-uasmhéadú, priontáil an teachtaireacht agus an eisceacht a ath-ardú
                print("Max retries exceeded.")
                raise

# Úsáid Sampla
send_request_with_advance_retry_mechanism('https://httpbin.org/status/404')

Seo na míbhuntáistí a bhaineann leis an gcur i bhfeidhm seo:

  • Déantar gach cód stádais a bhaineann leis na raonta 4xx agus 5xx a athchúrsáil. Mar sin féin, ní gá iarratais a eascraíonn as cód stádais 404 (nár aimsíodh) a athchúrsáil.
  • D'fhéadfadh roinnt seirbhísí braite bot freagairt le cód stádais 200 (OK), ach d'fhéadfadh an t -ábhar freagartha a bheith difriúil. Ní láimhseáiltear an cás seo sa chur i bhfeidhm reatha. D'fhéadfadh bailíochtú fad an ábhair a chur i bhfeidhm aghaidh a thabhairt ar an gceist seo.

Seo an cód ceartaithe mar aon le tuairimí a thugann aghaidh ar na míbhuntáistí:

import requests
import time

def send_request_with_advance_retry_mechanism(url, max_retries=3, delay=1, min_content_length=10):
    """
    Seolann sé iarratas HTTP GET chuig an URL sonraithe le meicníocht ardtréimhsithe.

    Parameters:
        url (str): An URL chun an t -iarratas a sheoladh chuig.
        max_retries (int): An líon uasta uaireanta chun an t -iarratas a atriail. Is é an réamhshocrú ná 3.
        delay (int): An mhoill (i soicindí) idir atrialacha. Is é an réamhshocrú ná 1.
        min_content_length (int): An fad íosta an ábhair freagartha atá le breithniú bailí. Is é an réamhshocrú ná 10.

    Raises:
        requests.RequestException: Ardaíonn sé an eisceacht dheireanach má theipeann ar gach atriall.
    """
    for attempt in range(max_retries):
        try:
            response = requests.get(url)
            # Eisceacht a ardú do chóid stádais 4xx nó 5xx
            response.raise_for_status()
            
            # Seiceáil an bhfuil an cód stádais freagartha 404
            if response.status_code == 404:
                print("404 Error: Not Found")
                break  # Lúb Scoir le haghaidh 404 Earráid
            
            # Seiceáil an bhfuil fad an téacs freagartha níos lú ná an fad íosta ábhar sonraithe
            if len(response.text) < min_content_length:
                print("Response text length is less than specified minimum. Retrying...")
                time.sleep(delay)
                continue  # An t -iarratas a athrá
            
            print('Response Status Code:', response.status_code)
            # Má chomhlíontar coinníollacha, briseadh amach as an lúb
            break
            
        except requests.RequestException as e:
            print(f"Attempt {attempt+1} failed:", e)
            if attempt < max_retries - 1:
                print(f"Retrying in {delay} seconds...")
                time.sleep(delay)
            else:
                print("Max retries exceeded.")
               # Athdhearbhaigh an eisceacht dheireanach má shroicheann uas-athsheachadáin
                raise

# Úsáid Sampla
send_request_with_advance_retry_mechanism('https://httpbin.org/status/404')

Earráidí sonracha HTTP a láimhseáil le seachvótálaithe

I gcás earráidí áirithe cosúil le 429 an iomarca iarratais, is féidir le húsáid a bhaint as seachvótálaithe rothlacha cabhrú le do chuid iarratas a dháileadh agus teorainn a chur le teorainneacha a sheachaint.

Cuireann an cód thíos straitéis athfhillteach ard i bhfeidhm mar aon le húsáid proxies. Sa tslí seo, is féidir linn meicníocht a athrá ar iarratais Python a chur i bhfeidhm. Tá sé tábhachtach freisin úsáid a bhaint as seachvótálaithe scríobtha gréasáin ardchaighdeáin. Ba chóir go mbeadh algartam maith ag na seachvótálaithe seo le haghaidh uainíochta seachfhreastalaí agus linn snámha iontaofa.

import requests
import time

def send_request_with_advance_retry_mechanism(url, max_retries=3, delay=1, min_content_length=10):
    """
   Seolann sé iarratas HTTP GET chuig an URL sonraithe le meicníocht ardtréimhsithe.

    Parameters:
        url (str): An URL chun an t -iarratas a sheoladh chuig.
        max_retries (int): An líon uasta uaireanta chun an t -iarratas a atriail. Is é an réamhshocrú 3.
        delay (int): An mhoill (i soicindí) idir atrialacha. Is é an réamhshocrú ná 1.
   
    Raises:
        requests.RequestException: Ardaíonn sé an eisceacht dheireanach má theipeann ar gach atriall.
    """
    
    proxies = {
        "http": "http://USER:PASS@HOST:PORT",
        "https": "https://USER:PASS@HOST:PORT"
    }
    
    for attempt in range(max_retries):
        try:
            response = requests.get(url, proxies=proxies, verify=False)
            # Eisceacht a ardú do chóid stádais 4xx nó 5xx
            response.raise_for_status()
            
            # Seiceáil an bhfuil an cód stádais freagartha 404
            if response.status_code == 404:
                print("404 Error: Not Found")
                break # Lúb Scoir le haghaidh 404 Earráid
            
            # Seiceáil an bhfuil fad an téacs freagartha níos lú ná 10 gcarachtar
            if len(response.text) < min_content_length:
                print("Response text length is less than 10 characters. Retrying...")
                time.sleep(delay)
                continue # An t -iarratas a athrá
            
            print('Response Status Code:', response.status_code)
          # Má chomhlíontar coinníollacha, briseadh amach as an lúb
            break
            
        except requests.RequestException as e:
            print(f"Attempt {attempt+1} failed:", e)
            if attempt < max_retries - 1:
                print(f"Retrying in {delay} seconds...")
                time.sleep(delay)
            else:
                print("Max retries exceeded.")
                # Athdhearbhaigh an eisceacht dheireanach má shroicheann uas-athsheachadáin
                raise

send_request_with_advance_retry_mechanism('https://httpbin.org/status/404')

Tá na hiarratais ar iarratas i Python ríthábhachtach chun scríobadh gréasáin éifeachtach a dhéanamh. Is féidir leis na modhanna a phléigh muid chun athsheachaidí a bhainistiú cabhrú le cosc ​​a chur ar bhlocáil agus ar éifeachtúlacht agus iontaofacht bailiú sonraí a chosc agus a fheabhsú. Má chuirtear na teicnící seo i bhfeidhm, beidh do scripteanna scríobtha gréasáin níos láidre agus níos lú so -ghabhálach do bhrath ag córais cosanta bot.

Tuairimí:

0 tuairimí