Пример #1
0
    def create(self, request):
        if not request.user.is_authenticated():
            return HttpResponseForbidden(_('Your must be logged in to access this service'))

        try:
            if request.get_host() != urlparse.urlparse(request.META["HTTP_REFERER"])[1]:
                return HttpResponseServerError(get_xml_error(_(u"Invalid request Referer")), mimetype='application/xml; charset=UTF-8')
        except:
            return HttpResponseServerError(get_xml_error(_(u"Invalid request Referer")), mimetype='application/xml; charset=UTF-8')

        # URI to be called
        if 'url' in request.POST:
            url = request.POST['url']
        else:
            return HttpResponseNotFound(get_xml_error(_(u"Url not specified")), mimetype='application/xml; charset=UTF-8')

        # HTTP method, by default is GET
        method = request.POST.get('method', 'GET').upper()

        # Params
        if method != 'GET' and 'params' in request.POST:
            # if Content-Type is xml or json then skipping encode function.
            if re.search("application/(json|xml|[a-zA-Z-]+\+xml)|text/xml", request.META["CONTENT_TYPE"]) != None:
                params = request.POST['params'].encode('utf-8')
            else:
                try:
                    params = urlencode(simplejson.loads(request.POST['params']))
                except Exception:
                    params = encode_query(request.POST['params'])
        else:
            params = None

        return self.do_request(request, url, method, params)
Пример #2
0
    def create(self, request):

        # URI to be called
        if request.POST.has_key('url'):
            url = request.POST['url']
        else:
            return HttpResponseNotFound(
                get_xml_error(_(u"Url not specified")),
                mimetype='application/xml; charset=UTF-8')

        # HTTP method, by default is GET
        if request.POST.has_key('method'):
            method = request.POST['method']
        else:
            method = "GET"

        # Params
        if request.POST.has_key('params'):
            # if Content-Type is xml format then skipping encode function.
            if re.search(
                    "(application|text)/xml|application/([a-zA-Z-]*)\+xml",
                    request.META['CONTENT_TYPE']) != None:
                params = request.POST['params'].encode('utf-8')
            else:
                try:
                    params = urlencode(simplejson.loads(
                        request.POST['params']))
                except Exception, e:
                    params = encode_query(request.POST['params'])
Пример #3
0
    def create(self, request):
        try:
            if request.get_host() != urlparse.urlparse(request.META["HTTP_REFERER"])[1]:
                return HttpResponseServerError(get_xml_error(_(u"Invalid request Referer")), mimetype='application/xml; charset=UTF-8')
        except:
            return HttpResponseServerError(get_xml_error(_(u"Invalid request Referer")), mimetype='application/xml; charset=UTF-8')

        # URI to be called
        if request.POST.has_key('url'):
            url = request.POST['url']
        else:
            return HttpResponseNotFound(get_xml_error(_(u"Url not specified")), mimetype='application/xml; charset=UTF-8')

        # HTTP method, by default is GET
        if request.POST.has_key('method'):
            method = request.POST['method'].upper()
        else:
            method = "GET"

        # Params
        if method != 'GET' and request.POST.has_key('params'):
            # if Content-Type is xml or json then skipping encode function.
            if re.search("application/(json|xml|[a-zA-Z-]+\+xml)|text/xml", request.META["CONTENT_TYPE"]) != None:
                params = request.POST['params'].encode('utf-8')
            else:
                try:
                    params = urlencode(simplejson.loads(request.POST['params']))
                except Exception, e:
                    params = encode_query(request.POST['params'])
Пример #4
0
    def create(self, request):
        if not request.user.is_authenticated():
            return HttpResponseForbidden(
                _('Your must be logged in to access this service'))

        try:
            if request.get_host() != urlparse.urlparse(
                    request.META["HTTP_REFERER"])[1]:
                return HttpResponseServerError(
                    get_xml_error(_(u"Invalid request Referer")),
                    mimetype='application/xml; charset=UTF-8')
        except:
            return HttpResponseServerError(
                get_xml_error(_(u"Invalid request Referer")),
                mimetype='application/xml; charset=UTF-8')

        # URI to be called
        if 'url' in request.POST:
            url = request.POST['url']
        else:
            return HttpResponseNotFound(
                get_xml_error(_(u"Url not specified")),
                mimetype='application/xml; charset=UTF-8')

        # HTTP method, by default is GET
        method = request.POST.get('method', 'GET').upper()

        # Params
        if method != 'GET' and 'params' in request.POST:
            # if Content-Type is xml or json then skipping encode function.
            if re.search("application/(json|xml|[a-zA-Z-]+\+xml)|text/xml",
                         request.META["CONTENT_TYPE"]) != None:
                params = request.POST['params'].encode('utf-8')
            else:
                try:
                    params = urlencode(simplejson.loads(
                        request.POST['params']))
                except Exception:
                    params = encode_query(request.POST['params'])
        else:
            params = None

        return self.do_request(request, url, method, params)
Пример #5
0
    def create(self,request):
        # URI to be called
        if request.POST.has_key('url'):
            url = request.POST['url']
        else:
            return HttpResponse(string_concat(['<error>',_(u"Url not specified"),'</error>']))

        # HTTP method, by default is GET
        if request.POST.has_key('method'):
            method = request.POST['method']
        else:
            method = "GET"

        # Params
        if request.POST.has_key('params'):
            #params = encode_query(request.POST['params'])
            try:
                params = urlencode(simplejson.loads(request.POST['params']))
            except Exception, e:
                params = encode_query(request.POST['params'])
Пример #6
0
    def create(self,request):
        # URI to be called
        if request.POST.has_key('url'):
            url = request.POST['url']
        else:
            return HttpResponse(string_concat(['<error>',_(u"Url not specified"),'</error>']))

        # HTTP method, by default is GET
        if request.POST.has_key('method'):
            method = request.POST['method']
        else:
            method = "GET"

        # Params
        if request.POST.has_key('params'):
            #params = encode_query(request.POST['params'])
            try:
                params = urlencode(simplejson.loads(request.POST['params']))
            except Exception, e:
                params = encode_query(request.POST['params'])
Пример #7
0
    def create(self, request):
        try:
            if request.get_host() != urlparse.urlparse(
                    request.META["HTTP_REFERER"])[1]:
                return HttpResponseServerError(
                    get_xml_error(_(u"Invalid request Referer")),
                    mimetype='application/xml; charset=UTF-8')
        except:
            return HttpResponseServerError(
                get_xml_error(_(u"Invalid request Referer")),
                mimetype='application/xml; charset=UTF-8')

        # URI to be called
        if request.POST.has_key('url'):
            url = request.POST['url']
        else:
            return HttpResponseNotFound(
                get_xml_error(_(u"Url not specified")),
                mimetype='application/xml; charset=UTF-8')

        # HTTP method, by default is GET
        if request.POST.has_key('method'):
            method = request.POST['method'].upper()
        else:
            method = "GET"

        # Params
        if method != 'GET' and request.POST.has_key('params'):
            # if Content-Type is xml or json then skipping encode function.
            if re.search("application/(json|xml|[a-zA-Z-]+\+xml)|text/xml",
                         request.META["CONTENT_TYPE"]) != None:
                params = request.POST['params'].encode('utf-8')
            else:
                try:
                    params = urlencode(simplejson.loads(
                        request.POST['params']))
                except Exception, e:
                    params = encode_query(request.POST['params'])
Пример #8
0
    def create(self, request):

        # URI to be called
        if request.POST.has_key('url'):
            url = request.POST['url']
        else:
            return HttpResponseNotFound(get_xml_error(_(u"Url not specified")), mimetype='application/xml; charset=UTF-8')

        # HTTP method, by default is GET
        if request.POST.has_key('method'):
            method = request.POST['method']
        else:
            method = "GET"

        # Params
        if request.POST.has_key('params'):
            # if Content-Type is xml format then skipping encode function.
            if re.search("(application|text)/xml|application/([a-zA-Z-]*)\+xml", request.META['CONTENT_TYPE']) != None:
                params = request.POST['params'].encode('utf-8')                
            else:
                try:
                    params = urlencode(simplejson.loads(request.POST['params']))
                except Exception, e:
                    params = encode_query(request.POST['params'])
Пример #9
0
    def create(self, request):
        # URI to be called
        if request.POST.has_key('url'):
            url = request.POST['url']
        else:
            return HttpResponse(
                string_concat(['<error>',
                               _(u"Url not specified"), '</error>']))

        # HTTP method, by default is GET
        if request.POST.has_key('method'):
            method = request.POST['method']
        else:
            method = "GET"

        # Params
        if request.POST.has_key('params'):
            params = encode_query(request.POST['params'])
        else:
            params = ''

        # HTTP call
        try:
            # Request creation
            proto, host, cgi, param, query = urlparse.urlparse(url)[:5]

            query = encode_query(query)

            # Proxy support
            proxy = ""
            try:
                proxy = settings.PROXY_SERVER
            except Exception:
                proxy = ""

            conn = getConnection(proto, proxy, host)

            # Adds original request Headers to the request (and modifies Content-Type for Servlets)
            headers = {}
            has_content_type = False
            http_content_type_value = ''
            for header in request.META.items():
                if (header[0].lower() == 'content-type'):
                    if (header[1] != None and header[1].lower() != 'none'):
                        has_content_type = True
                if (header[0].lower() == 'http_content_type'):
                    http_content_type_value = header[1]
                headers[header[0]] = header[1]

            # Add Content-Type (Servlets bug)
            if ((method == 'POST' or method == 'PUT')
                    and not has_content_type):
                if (http_content_type_value != ''):
                    headers['Content-Type'] = http_content_type_value
                else:
                    headers[
                        'Content-Type'] = 'application/x-www-form-urlencoded'

            # The same with cookies
            cookies = ''
            for cookie in request.COOKIES.items():
                cookies = cookies + cookie[0] + '=' + cookie[1] + '; '
            headers['Cookie'] = cookies

            # Open the request
            if query != '':
                cgi = cgi + '?%s' % query

            if (proxy != ""):
                conn.request(method, url, params, headers)
            else:
                conn.request(method, cgi, params, headers)

            res = conn.getresponse()

            # Redirect resolution
            MAX_REDIRECTS = 50
            index_redirects = 0

            while (res.status >= 300) and (res.status < 400):

                if (index_redirects >= MAX_REDIRECTS):
                    return HttpResponse(
                        '<error>Redirect limit has been exceeded</error>')
                index_redirects = index_redirects + 1

                url = res.getheader('Location')
                proto, host, cgi, param, auxquery = urlparse.urlparse(url)[:5]
                conn = getConnection(proto, proxy, host)

                auxquery = encode_query(auxquery)

                if query != '':
                    query = query + "&" + auxquery
                else:
                    query = auxquery

                if query != '':
                    cgi = cgi + '?%s' % query

                if (proxy != ""):
                    conn.request(method, url, params, headers)
                else:
                    conn.request(method, cgi, params, headers)

                res = conn.getresponse()

            # Add content-type header to the response
            if res.getheader('content-type'):
                response = HttpResponse(res.read(),
                                        mimetype=res.getheader('content-type'))
            else:
                response = HttpResponse(res.read())

            # Set status code to the response
            response.status_code = res.status

            # Add all the headers recieved to the response
            headers = res.getheaders()
            for header in headers:
                if is_valid_header(string.lower(header[0])):
                    response[header[0]] = header[1]

            return response

        except Exception, e:
            return HttpResponseServerError(
                "<html><head><title>Error HTTP 500</title></head><body>%s</body></html>"
                % e,
                mimetype='text/html; charset=UTF-8')
Пример #10
0
        if request.POST.has_key('params'):
            #params = encode_query(request.POST['params'])
            try:
                params = urlencode(simplejson.loads(request.POST['params']))
            except Exception, e:
                params = encode_query(request.POST['params'])
        else:
            params = ''

        # HTTP call
        try:
            httplib.HTTPConnection.debuglevel = 1
            # Request creation
            proto, host, cgi, param, query = urlparse.urlparse(url)[:5]
            
            query = encode_query(query)
            
            #manage proxies with authentication (get it from environment)
            if (host.startswith(('localhost','127.0.0.1'))):
                proxy = urllib2.ProxyHandler({})#no proxy
            else:
                proxy = urllib2.ProxyHandler()#proxies from environment
        
            opener = urllib2.build_opener(proxy)            
                   
                        
            # Adds original request Headers to the request (and modifies Content-Type for Servlets)
            headers = {}
            has_content_type = False
            http_content_type_value = ''
            for header in request.META.items():
Пример #11
0
        if request.POST.has_key('params'):
            #params = encode_query(request.POST['params'])
            try:
                params = urlencode(simplejson.loads(request.POST['params']))
            except Exception, e:
                params = encode_query(request.POST['params'])
        else:
            params = ''

        # HTTP call
        try:
            httplib.HTTPConnection.debuglevel = 1
            # Request creation
            proto, host, cgi, param, query = urlparse.urlparse(url)[:5]
            
            query = encode_query(query)
            
            #manage proxies with authentication (get it from en	vironment)
            proxy=None   	
            for proxy_name in settings.NOT_PROXY_FOR:
    	        if host.startswith(proxy_name):
    	            proxy = urllib2.ProxyHandler({})#no proxy
                    break
    
            if not proxy:
	            #Host is not included in the NOT_PROXY_FOR list => proxy is needed!
                proxy = urllib2.ProxyHandler()#proxies from environment
        
            opener = urllib2.build_opener(proxy)            
                   
                        
Пример #12
0
    def create(self,request):
        # URI to be called
        if request.POST.has_key('url'):
            url = request.POST['url']
        else:
            return HttpResponse(string_concat(['<error>',_(u"Url not specified"),'</error>']))

        # HTTP method, by default is GET
        if request.POST.has_key('method'):
            method = request.POST['method']
        else:
            method = "GET"

        # Params
        if request.POST.has_key('params'):
            params = encode_query(request.POST['params'])
        else:
            params = ''

        # HTTP call
        try:
            # Request creation
            proto, host, cgi, param, query = urlparse.urlparse(url)[:5]
            
            query = encode_query(query)
            
            # Proxy support
            proxy = ""
            try:
                proxy = settings.PROXY_SERVER
            except Exception:
                proxy = ""
                
            conn = getConnection(proto, proxy, host)
                
            # Adds original request Headers to the request (and modifies Content-Type for Servlets)
            headers = {}
            has_content_type = False
            http_content_type_value = ''
            for header in request.META.items():
                if (header[0].lower() == 'content-type'):
                    if (header[1] != None and header[1].lower() != 'none'):
                        has_content_type = True
                if (header[0].lower() == 'http_content_type'):
                    http_content_type_value = header[1]
                headers[header[0]] = header[1]
                    
                
            # Add Content-Type (Servlets bug)
            if ((method == 'POST' or method == 'PUT') and not has_content_type):
                if (http_content_type_value != ''):
                    headers['Content-Type'] = http_content_type_value
                else:
                    headers['Content-Type'] = 'application/x-www-form-urlencoded'
            
            # The same with cookies
            cookies = ''
            for cookie in request.COOKIES.items():
                cookies = cookies + cookie[0] + '=' + cookie[1] + '; '	
            headers['Cookie'] = cookies

            # Open the request
            if query != '':
                cgi = cgi + '?%s' % query
                
            if (proxy != ""):
                conn.request(method, url, params, headers)
            else:
                conn.request(method, cgi, params, headers)

            res = conn.getresponse()

            # Redirect resolution
            MAX_REDIRECTS = 50
            index_redirects = 0
    
            while (res.status >= 300) and (res.status < 400):

                if (index_redirects >= MAX_REDIRECTS):
                    return HttpResponse('<error>Redirect limit has been exceeded</error>')
                index_redirects = index_redirects + 1

                url = res.getheader('Location')
                proto, host, cgi, param, auxquery = urlparse.urlparse(url)[:5]
                conn = getConnection(proto, proxy, host)

                auxquery = encode_query(auxquery)

                if query != '':
                    query = query + "&" + auxquery
                else:
                    query = auxquery

                if query != '':
                    cgi = cgi + '?%s' % query

                if (proxy != ""):
                    conn.request(method, url, params, headers)
                else:
                    conn.request(method, cgi, params, headers)

                res = conn.getresponse()
                
            # Add content-type header to the response
            if res.getheader('content-type'):
                response = HttpResponse (res.read(), mimetype=res.getheader('content-type'))
            else:
                response = HttpResponse (res.read())

            # Set status code to the response
            response.status_code = res.status

            # Add all the headers recieved to the response
            headers = res.getheaders()
            for header in headers:
                if is_valid_header (string.lower(header[0])):
                    response[header[0]] = header[1]

            return response

        except Exception, e:
            return HttpResponseServerError("<html><head><title>Error HTTP 500</title></head><body>%s</body></html>" % e, mimetype='text/html; charset=UTF-8')