首页 > 解决方案 > 从 Sonarqube 从 Api 提取数据时出现错误 401

问题描述

直接在Browser中使用Api地址时,正确的带入了数据和Json。

但是在 Postman 或 Python 中尝试相同的操作时,不会加载数据。

令牌有效,我在普通公司的 VPN 上,但没有成功。

有没有人经历过这个并且知道分析它的方法?

代码

response = requests.get('https://urlsonar/api/components/search_projects', verify=False)

print(response.status_code)
print(response.json())

代码 2:

response = requests.get('https://urlsonar/api/components/search_projects', headers={'Authorization': '479ec8bdb82b316abad411fc21d3bed129e19c05'}, verify=False)
print(response.status_code)
print(response.json())

错误

401 Traceback(最近一次调用最后):文件“C:\Users\Paulo\Documents\projetos\python\CONEXAO_SONAR_EMISSAO.py”,第 39 行,在 print(response.json()) 文件“C:\Users\Paulo\ AppData\Roaming\Python\Python39\site-packages\requests\models.py”,第 900 行,在 json 中返回 complexjson.loads(self.text, **kwargs) 文件“C:\Program Files\Python39\lib\json_ init _.py",第 346 行,加载返回 _default_decoder.decode(s) 文件“C:\Program Files\Python39\lib\json\decoder.py”,第 337 行,解码 obj,end = self.raw_decode( s, idx=_w(s, 0).end()) 文件“C:\Program Files\Python39\lib\json\decoder.py”,第 355 行,在 raw_decode 中引发 JSONDecodeError("Expecting value", s, err .value) 来自无 json.decoder.JSONDecodeError:期望值:第 1 行第 1 列(字符 0)PS C:\Users\Paulo\Documents\projetos\python>

标签: pythonrequestsonarqube

解决方案


令牌可能是有效的,但它的使用方式却不是。Authorization标头应该包含身份验证方法和一个值,在方法的情况下Basic应该是一个 base64 编码的字符串username:password。使用 SonarQube 令牌,您应该用令牌替换用户名并使用空密码。

给定 base64 编码的值:

$ echo -n '479ec8bdb82b316abad411fc21d3bed129e19c05:' | base64
NDc5ZWM4YmRiODJiMzE2YWJhZDQxMWZjMjFkM2JlZDEyOWUxOWMwNTo=

标题应该是:

Authorization: Basic NDc5ZWM4YmRiODJiMzE2YWJhZDQxMWZjMjFkM2JlZDEyOWUxOWMwNTo=

然而,使用requests库最简单的方法是使用auth而不是自己计算标题,即:

response = requests.get('https://urlsonar/api/components/search_projects', 
                        auth=('479ec8bdb82b316abad411fc21d3bed129e19c05', ''))

推荐阅读