Как я могу проверить, проверяет ли urllib сертификаты SSL? - PullRequest
0 голосов
/ 20 мая 2019

Я пишу скрипт на Python для взаимодействия с Rally WSAPI.Я использую Python 3.6.1, который, как я понимаю, должен проверять SSL-сертификаты по умолчанию.

При использовании Pyral я получаю ошибку SSL, хотя я могу остановить ее, отключив verify_ssl_cert.Я не использую urllib.request, что говорит о том, что urllib не проверяет, хотя в моей версии проверка должна быть по умолчанию.

При использовании этой пиратской версии я получаю ошибку SSL:

from pyral import Rally, rallySettings, RallyRESTAPIError

my_server      = "rally1.rallydev.com"

my_username    = "************"

my_password    = "***********"

rally = Rally(my_server, my_username,my_password)


workspaces = rally.getWorkspaces()

for wksp in workspaces:

    print("    Worspace: ObjectID=%12s  Name='%s'" % (wksp.oid, wksp.Name))

    projects = rally.getProjects(workspace=wksp.Name)

    for proj in projects:

        print("            Project: ObjectID=%12.12s  Name='%s'" % (proj.oid, proj.Name))

Ошибка: pyral.context.RallyRESTAPIError: Ошибка проверки сертификата SSL

изменение вызова Rally на

rally = Rally(my_server, my_username, my_password, verify_ssl_cert=False)

переключает ошибку на предупреждение.

Этоверсия urllib, которая не выдает ошибку

import urllib.request, json

# create a password manager

password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()



# Add the username and password.

# If we knew the realm, we could use it instead of None.

top_level_url = "https://rally1.rallydev.com"

username = "****************"

password = "********************"

password_mgr.add_password(None, top_level_url, username, password)



handler = urllib.request.HTTPBasicAuthHandler(password_mgr)



# create "opener" (OpenerDirector instance)

opener = urllib.request.build_opener(handler)



a_url = "https://rally1.rallydev.com/slm/webservice/v2.0/HierarchicalRequirement/1234567" #story example

# use the opener to fetch a URL

opener.open(a_url)

# Install the opener.

# Now all calls to urllib.request.urlopen use our opener.

urllib.request.install_opener(opener)

response = urllib.request.urlopen(a_url)

data = json.loads(response.read())


print(data) 
...