Hi all,
I encountered some issues with JIRA API request in my current project. Mainly api.atlassian.com/ex/jira doesn’t have a consistent response.
These are the testing tools that I used.
- OS: ubuntu 22.04
- Python (3.10) requests lib
- React (18+) with Axios
- Curl 7.81.0
Issue
I’m encountering a perplexing issue with OAuth 2.0 integration apps that I’ve created in the Atlassian Developer Console (https://developer.atlassian.com/console/myapps/ ). The responses between apps are quite baffling even thought they are identical for all apps.
My steps are:
- I created multiple OAuth 2.0 integration apps (for different redirect URLs purpose in the future) with exactly the same settings.
- The first app works perfectly for both Confluence and Jira OAuth.
- However, the second app doesn’t work with Jira. It shows the error message: “Something went wrong. Close this page and try again, or raise a support request.”
- The third app doesn’t work for both Confluence and Jira, displaying the same error message.
API responses are also inconsistency. According to JIRA document, when I sent curl request to JIRA API, I always get 200 from request. The API also works with Elixir Tesla. Example:
curl --request GET \
--url '<https://api.atlassian.com/ex/jira/<CLOUD_ID>>/rest/agile/1.0/board' \
--header 'Authorization: Bearer <TOKEN>' --header 'Accept: application/json'
The issue arises in using the same API with React 18 and Python.
I get inconsistent returns 400 - Bad request or unauthenticated without any indicators.
let accessToken = "example access token"
let cloudID = "example cloud id"
const requestOptions = {
headers: { Authorization: `Bearer ${accessToken}`, Accept: ' application/json' },
};
axios.get(`https://api.atlassian.com/ex/jira/${cloudID}/rest/agile/1.0/board`, requestOptions)
.then((response) => {
console.log(response)
})
.catch((error) => {
console.log(error)
})
With Python, once add request params (such as request_params = {“maxResults”: 1000} ), it gives 400 - Bad.
import requests
import logging
def jira_request() -> None:
HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
url = "<https://api.atlassian.com/ex/jira/<CLOUD_ID>/rest/agile/1.0/board/1/issues"
url = "<https://api.atlassian.com/ex/jira/<CLOUD_ID>/rest/agile/1.0/board/1/issues?maxResults=10" # FAIL
request_params = {"maxResults": 1000}
headers = {
"User-Agent": "curl/7.81.0",
"Accept": "application/json",
"Accept-Encoding": "identity",
"Authorization": "Bearer <TOKEN>",
}
response = requests.get(url, headers=headers, params=None) # SUCCESS
response = requests.get(url, headers=headers, params=request_params) # FAIL
if __name__ == "__main__":
jira_request()
################## Results ###############################
reply: 'HTTP/1.1 400 Bad Request\r\n'
header: Date: Thu, 13 Jun 2024 04:26:25 GMT
header: Content-Type: text/html;charset=utf-8
header: Content-Length: 435
header: Server: AtlassianEdge
header: Content-Language: en
header: X-Trace-Id: 68cf738f45304ecb933b276e383ce792
header: X-Frame-Options: SameOrigin
header: X-Content-Type-Options: nosniff
header: X-Xss-Protection: 1; mode=block
header: Atl-Traceid: 68cf738f45304ecb933b276e383ce792
header: Strict-Transport-Security: max-age=63072000; preload
header: Report-To: {"endpoints": [{"url": "<https://dz8aopenkvv6s.cloudfront.net>"}], "group": "endpoint-1", "include_subdomains": true, "max_age": 600}
header: Nel: {"failure_fraction": 0.001, "include_subdomains": true, "max_age": 600, "report_to": "endpoint-1"}
DEBUG:urllib3.connectionpool:<https://api.atlassian.com:443> "GET /ex/jira/<CLOUD_ID>/rest/agile/1.0/board/1/issue?maxResults=10 HTTP/1.1" 400 435
I have tried various libraries in Python such as HTTPX and aiohttp, but none of these worked.
Also, to point out that I have not faced any issue while working with Confluence APIs.
The above issue is with Jira APIs.
I would appreciate guidance to resolve this issue.