如何在客户端修改GET请求(在ajax之外)的接受头?

时间:2014-11-18 22:31:28

标签: javascript django http-accept-header

我在页面上有一个下载到Excel按钮,其目的是调用完全相同的URL,但请求标头设置为“application / ms-excel”。

目前,我伪造它,通过调用另一个URL,然后调整标题然后转发到相同的函数。

服务器端(Django):

HTTP_HEADER_EXCEL = "application/ms-excel"

#fake testing url
#http://localhost:8000/myfunction/<CLASSID>/xls/

def myfunction_xls(request, CLASSID):
    #intercept request, add the appropriate accepts
    #and forward it
    request.META["HTTP_ACCEPT"] = HTTP_HEADER_EXCEL
    request.META["dbr"] = dbr

    return myfunction(request, CLASSID)

#standard url
#http://localhost:8000/myfunction/<CLASSID>/

def myfunction(request, CLASSID, f_callback=None):

    if request.META["HTTP_ACCEPT"] == HTTP_HEADER_EXCEL:
        f_callback=provider.generateExcel

    ....do lots of work...

    di_context = dict(inst=inst,
            parent=inst,
            custom=custom,
            url_excel=url_excel,

    if f_callback:
        #use xlsxwriter to process di_context data
        #wrap up the appropriate response headers
        #and it appears as a download  (it works)
        return f_callback(request, di_context)

    #non-Excel branch, i.e. standard Django behavior
    t = get_template('pssecurity/security_single.html')
    c = RequestContext(
        request,
        di_context,
        )    
    html = t.render(c)
    return HttpResponse(html)

我的问题是我不想仅为Excel维护一个自定义URL(或者为url添加一个可选的/ xls /到正则表达式。完全可以使用现有的URL,并在服务器上调整服务器接受标题。并且,是的,我可以添加查询参数来表示xls,但是...不是我的特殊要求接受标题是什么?

我在Ajax中找到了关于如何执行此操作的discussion,但这不是必需的。非常满意于定期发出指定application / ms-excel的GET(非POST)请求。

我知道我无法使用href属性指定接受。并且,虽然javascript中的window.open()可以正常使用,我也没有看到任何方法来更改接受标头。

嗯,是的,可能是一个网络菜鸟问题,但我找不到很多关于在$ http或$ ajax trickery之外轻松修改接受标题。

0 个答案:

没有答案