Запросы / urllib не работает во Flask / Apache / mod_wsgi / Windows - PullRequest
0 голосов
/ 30 августа 2018

У меня есть приложение 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, и вернуть ее repr esentation.

1 Ответ

0 голосов
/ 03 сентября 2018

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

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

...