2016-02-13 3 views
1

У меня есть скрипт Python 2.6, который скачивает файл с веб-сервера. Я хочу, чтобы этот скрипт, чтобы передать имя пользователя и пароль (для authenrication перед загрузкой файла), и я передаю их как часть URL следующим образом:Скачайте файл с https с помощью аутентификации

import urllib2 
response = urllib2.urlopen("http://'user1':'password'@server_name/file") 

Однако я получаю ошибку синтаксиса в этом случае. Правильно ли это? Я довольно новичок в Python и кодировании в целом. Может кто-нибудь помочь мне? Спасибо!

+0

Как ожидается сервер, ожидающий их? Перейдите к URL-адресу и откройте сетевую вкладку в инструментах dev, и посмотрите, как выглядит запрос – IanAuld

+0

См. Https://docs.python.org/2/howto/urllib2.html#id6 – Selcuk

ответ

3

Я полагаю, вы пытаетесь пройти базовую аутентификацию. В этом случае, вы можете справиться с этим так:

import urllib2 

username = 'user1' 
password = '123456' 

#This should be the base url you wanted to access. 
baseurl = 'http://server_name.com' 

#Create a password manager 
manager = urllib2.HTTPPasswordMgrWithDefaultRealm() 
manager.add_password(None, baseurl, username, password) 

#Create an authentication handler using the password manager 
auth = urllib2.HTTPBasicAuthHandler(manager) 

#Create an opener that will replace the default urlopen method on further calls 
opener = urllib2.build_opener(auth) 
urllib2.install_opener(opener) 

#Here you should access the full url you wanted to open 
response = urllib2.urlopen(baseurl + "/file") 
+0

как сохранить данные для загрузки в конкретном файле? – Estefy

4

Если вы можете использовать requests библиотеку, это безумно легко. Я настоятельно рекомендую использовать его, если это возможно:

import requests 

url = 'http://somewebsite.org' 
user, password = 'bob', 'I love cats' 
resp = requests.get(url, auth=(user, password)) 
+0

'request.get' не работал для меня в последней строке. Я думаю, это должно быть исправлено на 'request.get' с 's' – deppfx

0

Использование запросов библиотеки и просто поставить учетные данные внутри файла .netrc.

Библиотека будет загружать их оттуда, и вы сможете передать код своему SCM без каких-либо проблем с безопасностью.