python/django中的Web代理?

noo*_*zie 2 python django proxy

我需要一个代理作为中介来获取图像.例如,我的服务器请求domain1.com/?url=domain2.com/image.png和domain1.com服务器将通过domain1.com服务器响应domain2.com/image.png上的数据.

基本上我想传递给我想要获取的URL的代理,并让代理服务器响应该资源.

关于从哪里开始的任何建议?

我需要一些非常容易使用或实现的东西,因为我是一个非常初学者.

我在python和/或django中找到的大多数解决方案都有代理充当"translater",即domain1.com/image.png转换为domain2.com/image.png,这显然是不一样的.

我目前有以下代码,但获取图像会导致数据乱码:

import httplib2
from django.conf.urls.defaults import *
from django.http import HttpResponse

def proxy(request, url):
    conn = httplib2.Http()
    if request.method == "GET":
        url = request.GET['url']
        resp, content = conn.request(url, request.method)
        return HttpResponse(content)
Run Code Online (Sandbox Code Playgroud)

dvc*_*crn 8

老问题,但对于未来的googlers,我认为这是你想要的:

# proxies the google logo
def test(request):
    url = "http://www.google.com/logos/classicplus.png"
    req = urllib2.Request(url)
    response = urllib2.urlopen(req)
    return HttpResponse(response.read(), mimetype="image/png")
Run Code Online (Sandbox Code Playgroud)


Ben*_*hon 6

一个非常简单的 Django 代理视图,带有requestsStreamingHttpResponse

import requests
from django.http import StreamingHttpResponse

def my_proxy_view(request):
    url = request.GET['url']
    response = requests.get(url, stream=True)
    return StreamingHttpResponse(
        response.raw,
        content_type=response.headers.get('content-type'),
        status=response.status_code,
        reason=response.reason)
Run Code Online (Sandbox Code Playgroud)

这种方法的优点是您不需要在将内容流式传输到客户端之前将完整文件加载到内存中。

如您所见,它转发了一些响应标头。根据您的需要,您可能还想转发请求标头;例如:

response = requests.get(url, stream=True,
    headers={'user-agent': request.headers.get('user-agent')})
Run Code Online (Sandbox Code Playgroud)


小智 1

如果您要获取和返回的文件是图像,则需要更改HttpResponse Objectmimetype的。