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

2024-10-01 13:39:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

http://localhost:8080/jasperserver/rest_v2/reportExecutions

我得到了这样一个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下载报告输出。在

http://localhost:8080/jasperserver/rest_v2/reportExecutions/d0ae90c-1538-4e40-b5ad-c145f521707c/exports/49f47112-4698-4398-9ed8-a62d552a7aa5/outputResource

它用404状态代码给出以下响应:

^{pr2}$

然后我使用以下url检查我的报告状态:

http://localhost:8080/jasperserver/rest_v2/reportExecutions/d0ae905c-1538-4e40-b5ad-c145f521707c

我收到一个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

救命啊。在

提前谢谢。在


Tags: nametokenrestidlocalhosthttpurldata