Jasper服务器rest_v2 api使用python中的请求

Jasper服务器rest_v2 api使用python中的请求,python,django,rest,python-requests,jasperserver,Python,Django,Rest,Python Requests,Jasperserver,我正在使用jasperserverrest\uv2web服务。我正在使用python中的请求模块来访问api。jasper服务器上的报告正在执行,并且 报告url如下所示: 我得到的json响应如下: { "status": "ready", "totalPages": 0, "requestId": "d0ae905c-1538-4e40-b5ad-c145f521707c", "reportURI": "/reports/Invoices/COD", "exports"

我正在使用jasperserverrest\uv2web服务。我正在使用python中的请求模块来访问api。jasper服务器上的报告正在执行,并且 报告url如下所示:

我得到的json响应如下:

{
  "status": "ready",
  "totalPages": 0,
  "requestId": "d0ae905c-1538-4e40-b5ad-c145f521707c",
  "reportURI": "/reports/Invoices/COD",
  "exports": [
    {
      "id": "49f47112-4698-4398-9ed8-a62d552a7aa5",
      "status": "ready",
      "outputResource": {
        "contentType": "application/pdf",
        "fileName": "COD.pdf",
        "outputFinal": true
      }
    }
  ]
}
这意味着我的报告被执行了

然后点击下面的url下载报告输出

它给了我以下404状态代码的响应:

{
  "message": "Resource d0ae95c-1538-4e40-b5ad-c145f521707c not found.",
  "errorCode": "resource.not.found",
  "parameters": [
    "d0ae95c-1538-4e40-b5ad-c145f521707c"
  ]
}
然后,我使用以下url检查了我的报告状态:

我收到一个404响应和以下json:

{
  "message": "Resource d0ae905c-1538-4e40-b5ad-c145f521707c not found.",
  "errorCode": "resource.not.found",
  "parameters": [
    "d0ae905c-1538-4e40-b5ad-c145f521707c"
  ]
}
使用邮递员也能很好地完成同样的工作。 注意:我正在传递有效的凭据和相应的头

以下是我的django对此的看法:

class JasperView(View):
    template = "report.html"

    def get_token(self):
        username = "zeeshan"
        password = "zeeshan"
        token = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
        return token

    def get(self, request, *args, **kwargs):
        return render(request, self.template)

    def post(self, request, *args, **kwargs):
        token = self.get_token()
        data = """
        <reportExecutionRequest>
            <reportUnitUri>/reports/Invoices/COD</reportUnitUri>
            <async>false</async>
            <freshData>false</freshData>
            <saveDataSnapshot>false</saveDataSnapshot>
            <outputFormat>pdf</outputFormat>
            <interactive>true</interactive>
            <ignorePagination>false</ignorePagination>
            <parameters>
                <reportParameter name="StartDate">
                    <value>2016-06-08 00:00:00</value>
                </reportParameter>
                <reportParameter name="EndDate">
                    <value>2016-07-01 00:00:00</value>
                </reportParameter>
                <reportParameter name="ReportID">
                    <value>COD2345</value>
                </reportParameter>
                <reportParameter name="client">
                    <value>Fetchr</value>
                </reportParameter>
                <reportParameter name="manager">
                    <value>Zeeshan Asgar</value>
                </reportParameter>
                <reportParameter name="client_add">
                    <value>Near Bhagat Singh Park, Malviya Nagar, New Delhi-110017</value>
                </reportParameter>
            </parameters>
        </reportExecutionRequest>
        """
        response = requests.post(url="http://localhost:8080/jasperserver/rest_v2/reportExecutions",
                                 headers={
                                     "Authorization": "Basic " + token,
                                     "Accept": "application/json",
                                     "Content-Type": "application/xml",
                                 },
                                 data=data)
        data = response.json()
        request_id = data.get("requestId")
        export_id = data.get("exports")[0].get("id")
        report_url = "http://localhost:8080/jasperserver/rest_v2/reportExecutions/{request_id}/exports/{export_id}/outputResource".format(
            request_id=request_id, export_id=export_id)
        report_resp = requests.get(url=report_url,
                                   headers={"Authorization": "Basic " + token, "Content-Type": "application/xml"})

        response = HttpResponse(content_type='application/pdf')
        response['Content-Disposition'] = 'attachment; filename="COD.pdf"'
        response.write(report_resp)
        return response
class JasperView(视图):
template=“report.html”
def get_令牌(自身):
username=“zeeshan”
password=“zeeshan”
token=base64.encodestring(“%s:%s%”(用户名、密码))。替换('\n',“”)
返回令牌
def get(自我、请求、*args、**kwargs):
返回呈现(请求,self.template)
def post(自我、请求、*args、**kwargs):
token=self.get_token()
data=”“”
/报告/发票/COD
假的
假的
假的
pdf
真的
假的
2016-06-08 00:00:00
2016-07-01 00:00:00
代码2345
取款机
泽山阿斯加
新德里Malviya Nagar Bhagat Singh公园附近-110017
"""
response=请求。post(url=”http://localhost:8080/jasperserver/rest_v2/reportExecutions",
标题={
“授权”:“基本”+令牌,
“接受”:“应用程序/json”,
“内容类型”:“应用程序/xml”,
},
数据=数据)
data=response.json()
request\u id=data.get(“requestId”)
export_id=data.get(“exports”)[0]。get(“id”)
报告url=”http://localhost:8080/jasperserver/rest_v2/reportExecutions/{request_id}/exports/{export_id}/outputResource'。格式(
请求id=请求id,导出id=导出id)
report\u resp=requests.get(url=report\u url,
标题={“授权”:“基本”+标记,“内容类型”:“应用程序/xml”})
response=HttpResponse(content\u type='application/pdf')
响应['Content-Disposition']='附件;filename=“COD.pdf”'
答复。编写(报告)
返回响应
救命啊


提前感谢。

您不应该使用导出id而不是报告id吗?不,我们需要传递报告id以检查报告状态。当我们需要以特殊格式下载报告时,我们使用导出id。您提供的链接显示的结果与第一个JSON响应类似。为什么要再次检查请求的状态(这不是报告id)如何?实际上,我正在使用以下url下载pdf格式的报告输出:然后我得到了404响应。所以我又检查了一次,你不应该用导出id而不是报告id吗?不,我们需要传递报告id来检查报告状态。当我们需要以特殊格式下载报告时,我们使用导出id。您提供的链接显示的结果与第一个JSON响应类似。为什么要再次检查请求的状态(这不是报告id)如何?实际上,我正在使用以下url下载pdf格式的报告输出:然后我得到了404响应。所以我又查了一遍