Запросы / urllib не работают в Flask / Apache / mod_wsgi / Windows

У меня есть приложение Flask с кодом, который обрабатывает данные, поступающие из запроса в другое веб-приложение, размещенное на другом сервере, и оно отлично работает при разработке, кроме того, библиотеку, которая обрабатывает запрос, можно вызывать и отлично использовать из python в наш сервер Windows ... Однако, когда библиотека вызывается веб-приложением в производстве с использованием mod_wsgi, она отказывается работать, запросы, сделанные сервером, просто ... превышают время ожидания.

Я перепробовал все, от переноса кода в файл, в котором он используется, до переключения с запросов на urllib ... ничего, пока они делаются из mod_wsgi, все запросы, которые я делаю по тайм-ауту. Это почему? это какая-то странная конфигурация apache, о которой я не подозреваю?

Я размещаю библиотеку ниже (извините, мне нужно немного ее подвергнуть цензуре, но я обещаю работает)

import requests
import re


class CannotAccessServerException(Exception):
    pass

class ServerItemNotFoundException(Exception):
    pass


class Service():
    REQUEST_URL = "http://server-ip/url?query = {query}&toexcel=csv"

    @classmethod
    def fetch_info(cls, query):
        # Get Approximate matches
        try:
            server_request = requests.get(cls.REQUEST_URL.format(query = query), timeout = 30).content
        except:
            raise CannotAccessServerException

        # If you're getting ServerItemNotFoundException or funny values consistently maybe the server has changed their tables.
        server_regex = re.compile('^([\d\-]+);[\d\-]+;[\d\-]+;[\d\-]+;[\d\-]+;[\-"\w]+;[\w"\-]+;{query};[\w"\-]+;[\w"\-]+;[\w"\-]+;[\w"\-]+;[\w\s:"\-]+;[\w\s"\-]+;[\d\-]+;[\d\-]+;[\d\-]+;([\w\-]+);[\w\s"\-]+;[\w\-]+;[\w\s"\-]+;[\d\-]+;[\d\-]+;[\d\-]+;([\w\-]+);[\d\-]+;[\d\-]+;[\w\-]+;[\w\-]+;[\w\-]+;[\w\-]+;[\w\s"\-]+$'.format(query = query), re.MULTILINE)

        server_exact_match = server_regex.search(server_request.decode())

        if server_exact_match is None:
            raise ServerItemNotFoundException


        result_json = {
            "retrieved1": server_exact_match.group(1),
            "retrieved2": server_exact_match.group(2),
            "retrieved3": server_exact_match.group(3)
        }

        return result_json


if __name__ == '__main__':
    print(Service.fetch_info(99999))

PS: Я знаю, что время истекает, потому что одна из вещей, которые я пробовал, заключалась в том, чтобы зафиксировать ошибку, вызванную request.get, и вернуть ее представление повтор.

Мое первое предположение - это брандмауэр, блокирующий исходящие соединения с рабочего сервера. Если это в Windows, еще более вероятно, что ограничения применяются к процессу Apache, но не к отдельному запуску скрипта?

matejcik 03.09.2018 11:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
91
1

Ответы 1

В случае, если кому-то интересно, после большого количества исследований, попыток запустить мой модуль как подпроцесса и всевозможных экспериментов, мне пришлось прибегнуть к репликации всего набора данных, который мне был нужен для запроса с удаленного сервера в мою базу данных с еженедельным crontab, а затем запросить это.

Итак ... Да, честно говоря, у меня нет решения или объяснения, почему это происходит. Но если это происходит с вами, лучше всего, к сожалению, может быть репликация всего набора данных на вашем сервере.

Другие вопросы по теме