2016-07-18 2 views
2

Я использую API отчетов jasper server (rest_v2).Загрузите отчет Jasper с помощью библиотеки запросов Python

выполнено под api для создания отчетов и получения запросовID и exportID.

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

{ 
    "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 
     } 
    } 
    ] 
} 

выше апи работает нормально (как вы можете видеть на выходе)

теперь я буду использовать ниже API, чтобы загрузить сгенерированный отчет.

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

В Почтальон я предусмотрел три заголовки

"Authorization": "Basic " + token 
"Accept": "application/json", 
"Content-Type": "application/xml" 

и был в состоянии загрузить отчет.

Теперь я попытался сделать то же самое, используя библиотеку python-запросов. и ответ я получаю в API загрузки был

{ 
    "message": "Resource d0ae95c-1538-4e40-b5ad-c145f521707c not found.", 
    "errorCode": "resource.not.found", 
    "parameters": [ 
    "d0ae95c-1538-4e40-b5ad-c145f521707c" 
    ] 
} 

ниже полный код

data = """ 
     <reportExecutionRequest> 
      ... 
     </reportExecutionRequest> 
     """ 

url = "http://localhost:8080/jasperserver/rest_v2/reportExecutions" 

headers = { 
    "Authorization": "Basic " + token, 
    "Accept": "application/json", 
    "Content-Type": "application/xml", 
} 

response = requests.post(url, data=data, headers=headers) 
data = response.json() 
request_id = data.get("requestId") 
export_id = data.get("exports")[0].get("id") 

# Till here working fine 

report_url = "http://localhost:8080/jasperserver/rest_v2/reportExecutions/{request_id}/exports/{export_id}/outputResource".format(request_id=request_id, export_id=export_id) 

headers = { 
    "Authorization": "Basic " + token, 
    "Accept": "application/json", 
    "Content-Type": "application/xml", 
} 

report_resp = requests.get(report_url, headers=headers) 

print report_resp.json() 

#{ 
# "message": "Resource d0ae95c-1538-4e40-b5ad-c145f521707c not found.", 
# "errorCode": "resource.not.found", 
# "parameters": [ 
# "d0ae95c-1538-4e40-b5ad-c145f521707c" 
# ] 
#} 

PS: Вы можете быть уверены в маркере. Я тестировал в почтальоне, и он работает нормально.

ответ

2

Хорошо. Я решил это, передав куки

report_resp = requests.get(report_url, headers=headers, cookies=response.cookies) 
+0

Использовать сеанс, и файлы cookie будут сохранены –

Смежные вопросы