0

在过去几天试图让 Qualys API 与 python 一起工作后,我通常会遇到诸如 401 和此类错误之类的错误,因为 python 代码示例说它们不受支持。

由于 Qualys API 是用 curl 编写的,因此我使用Curl.trillworks.com将 curl 转换为 python。

我使用的代码是:(卷曲)

curl -u "USERNAME:PASSWD" -H "X-Requested-With: Curl" -X "POST" -d
"action=create&title=My+Dynamic+Search+List&global=1&published_dat
e_within_last_days=7&patch_available=1"
"https://qualysapi.qualys.com/api/2.0/fo/qid/search_list/dynamic/"

并将其转换为python:

import requests

headers = {
    'X-Requested-With': 'Curl',
}

data = [
  ('published_date_within_last_days', '7'),
  ('patch_available', '1'),
]

response = requests.post('https://qualysapi.qualys.com/api/2.0/fo/qid/search_list/dynamic/', headers=headers, data=data, auth=('USRNAME', 'PASSWORD'))
print (response)

并得到 401 响应。我应该添加任何想法或更多说明吗?谢谢

更新 - 2020 年 12 月 27 日

自从我遇到这个问题以来已经有一段时间了。不确定是什么问题,但对于遇到相同问题的其他人,我建议将 CURL 语句插入 Insomnia 或 Postman 等工具,将这些语句转换为任何语言。这将帮助您获得更准确的转换。

4

3 回答 3

1

根据Qualys API v10.16QualysSession ,您可以在执行登录后通过传递 cookie 来尝试基于会话的身份验证。

发布登录请求:

login_api = api_url+"/api/2.0/fo/session/"

myheaders = { 'X-Requested-With': 'python'}
myparams  = { "action" : "login", "username" : api_username,  "password" : api_password} 

r_login =  requests.post(login_api, headers=myheaders, params=myparams)

print(r_login.status_code)
print(r_login.cookies.get_dict())

获得登录 ok 响应后,您可以将 cookie 传递为dictins 后续getpost

mycookies =  r_login.cookies.get_dict()
r_new =  requests.post(another_url, headers=myheaders, params=myparams, cookies=mycookies)
于 2021-12-28T10:46:29.867 回答
1

我假设用户名/密码输入无效。

于 2020-10-08T00:05:23.947 回答
0

有两个问题,您的数据是列表,而它应该是 json,第二个是您应该在使用用户名和密码发出请求时使用 HTTPBasicAuth。

以下是更正后的代码

import requests
from requests.auth import HTTPBasicAuth


headers = {
    'X-Requested-With': 'Curl',
}

data = {
  'published_date_within_last_days': '7',
  'patch_available': '1',
}

response = requests.post('https://qualysapi.qualys.com/api/2.0/fo/qid/search_list/dynamic/', headers=headers, data=data, auth=HTTPBasicAuth('USRNAME', 'PASSWORD'))
print (response)
于 2022-03-03T09:06:42.677 回答