Nano Hash - криптовалюты, майнинг, программирование

просмотр прокси-сервера ajax django

Веб-приложение django должно выполнять вызовы ajax на внешний URL-адрес. В разработке я работаю напрямую с django, поэтому у меня проблема с междоменными доменами. Каков способ django написать прокси для вызова ajax?

07.02.2010

Ответы:


1

Вот очень простая реализация прокси для Django.

from django.http import HttpResponse
import mimetypes
import urllib2

def proxy_to(request, path, target_url):
    url = '%s%s' % (target_url, path)
    if request.META.has_key('QUERY_STRING'):
        url += '?' + request.META['QUERY_STRING']
    try:
        proxied_request = urllib2.urlopen(url)
        status_code = proxied_request.code
        mimetype = proxied_request.headers.typeheader or mimetypes.guess_type(url)
        content = proxied_request.read()
    except urllib2.HTTPError as e:
        return HttpResponse(e.msg, status=e.code, mimetype='text/plain')
    else:
        return HttpResponse(content, status=status_code, mimetype=mimetype)

Это проксирует запросы из PROXY_PATH+путь в TARGET_URL+путь. Прокси включается и настраивается путем добавления такого шаблона URL в urls.py:

url(r'^PROXY_PATH/(?P<path>.*)$', proxy_to, {'target_url': 'TARGET_URL'}),

Например:

url(r'^images/(?P<path>.*)$', proxy_to, {'target_url': 'http://imageserver.com/'}),

сделает запрос на http://localhost:8000/images/logo.png и вернет файл по адресу http://imageserver.com/logo.png.

Строки запроса пересылаются, а заголовки HTTP, такие как файлы cookie и данные POST, — нет (это довольно легко добавить, если вам это нужно).

Примечание. Это в основном предназначено для использования в разработке. Правильный способ обработки проксирования в продакшене — использовать HTTP-сервер (например, Apache или Nginx).

05.03.2012
  • Весь смысл в передаче файлов cookie и данных POST, поэтому вместо того, чтобы говорить нам, что легко добавить файлы cookie и данные POST, вы могли бы просто написать код? 25.05.2012
  • Да, возможно, вы могли бы добавить части для передачи файлов cookie и данных POST? 01.06.2012

  • 2

    Я столкнулся с этим вопросом, пытаясь ответить на него сам, и нашел это приложение Django:

    http://httpproxy.yvandermeer.net/

    ... что немного тяжеловато для того, что мне нужно (запись и воспроизведение, требуется syncdb для добавления в модель). Но вы можете увидеть код, который он использует в общем представлении проксирования, основанном на httplib2:

    http://bitbucket.org/yvandermeer/django-http-proxy/src/1776d5732113/httpproxy/views.py

    24.11.2010

    3

    Я прав, что вы спрашиваете о том, как написать представление в Django, которое могло бы принимать входящий запрос AJAX, отправлять запрос на удаленный сервер, а затем возвращать полученный ответ в браузер?

    Если это так, то это не совсем специфичный для Django вопрос — удаленные вызовы можно выполнять с помощью Python urllib2 или http://docs.python.org/library/httplib.html, а затем вам просто нужно указать:

     return HttpResponse(received_response)
    

    -- в вашем прокси-представлении Django. Я предполагаю, что здесь нет обработки ответа, потому что, если это просто прокси для вызова AJAX, JavaScript ожидает необработанные данные.

    07.02.2010
  • Я не проверял это, но я считаю, что этот код будет копировать только тело ответа, а не заголовки HTTP ответа, которые могут содержать много полезной информации с сервера. 22.09.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..