如何获取请求的remote_addr?
我有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)
我读了一篇文章说HttpRequest有一个META属性,在META中有REMOTE_ADDR。
但在我的场景中,我如何获得REMOTE_ADDR?
答案 0 :(得分:4)
您还没有说明为什么需要这样做,但如果您想获得客户的IP,那么Remote-Address
就不可靠了。如果用户在代理之后或者您的服务器在反向代理之后,它将返回服务器IP。
X-Forwarded-For
是获取客户端IP的更可靠方式。如果客户端和您的Web服务器之间有多个代理,它将返回多个IP地址。
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或Remote-Address中的第一个IP获取IP。