如何获取请求的远程地址?
我有一个BileModelListAPIView如下:

class BileModelListAPIView(ListAPIView):
    serializer_class = BModelSerializer
    permission_classes = []
    queryset = BileModel.objects.all()

    def get(self, request):

        print(request) # there I debug the point
        return Response(data="ok", status=HTTP_200_OK)

python - 在Django-Rest-Framework中获得REMOTE_ADDR?-LMLPHP
我读过一篇文章,上面说HttpRequest有一个META属性,在META中有一个远程地址。
但在我的场景中,我如何才能得到远程地址?

最佳答案

你还没有说为什么你需要这个,但是如果你想得到客户的IP,那么Remote-Address是不可靠的。如果用户在代理后面或您的服务器在反向代理后面,它将返回服务器IP。
X-Forwarded-For是获取客户端IP的更可靠的方法。它将返回多个IP地址,在客户端和Web服务器之间的多个代理的情况下。
X-Forwarded-For也包含在META属性中,但有时服务器未配置为包含X-Forwarded-For头。在这种情况下,您只剩下Remote-Address
代码:

x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
    ip = x_forwarded_for.split(',')[0]
else:
    ip = request.META.get('REMOTE_ADDR')

如果X-Forwarded-For报头不可用,则此代码将从X-Forwarded-For或远程地址中的第一个IP获取IP。

09-10 09:58
查看更多