Подключите URL-адреса для request.post, используя Python - PullRequest
0 голосов
/ 18 июня 2020
• 1000 Но, к сожалению, он подключается только к одному URL-адресу и выдает исключение. Можно ли подключить вторичный, если первичный URL не работает? может кто-нибудь помочь мне решить эту проблему?
code:

import os
import requests
import logging

retry_count = 2
timeout = 10

class consumer():
    def send_request(self, retry=retry_count, **kwargs):
        primaryURL = 'www.w3schools.com/xml/'  #sample link
        secondaryURL = 'http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL'  #sample link
        for i in range(retry):
            headers = {'content-type': 'text/xml'}
            try:
                headers = {'content-type': 'text/xml'}
                if primaryURL:
                    response = requests.post(primaryURL, data=body, headers=headers, **kwargs)
                elif secondaryURL:
                    response = requests.post(secondaryURL, data=body, headers=headers)
                break
            except TimeoutError as e:
                print("request post time out for URL")
                continue
            except Exception as e:
                logging.error(e)


    def main(self):
        self.send_request()

if __name__ == "__main__":
    consumer = consumer()
    consumer.main()

1 Ответ

0 голосов
/ 18 июня 2020

простой способ сделать это - l oop по списку URL-адресов, упорядоченных по убыванию приоритета. для каждого URL попытайтесь получить ответ n раз (в зависимости от количества попыток). как только ответ был получен, верните его и при этом прервите l oop. например:

import requests
import logging

retry_count = 2
timeout = 10

class consumer():
    def send_request(self, retry=retry_count, **kwargs):
        for url in ["http://www.w3schoolsss.com/xml/", "http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL"]:
            for i in range(retry):
                try:
                    print("trying %s (n = %s)" % (url, i))
                    response = requests.post(url, headers={'content-type': 'text/xml'}, **kwargs)
                    return response
                except Exception as e:
                    logging.error(e)

    def main(self):
        self.send_request()


if __name__ == "__main__":
    consumer = consumer()
    consumer.main()
...