Seite 1 von 1

Über proxy-server downloaden?

Verfasst: Mittwoch 17. August 2005, 08:11
von HarryH
Hi,

Bei folgendem Code erhalte ich nachfolgende Fehlermeldung:

Code: Alles auswählen

import urllib2

f = urllib2.urlopen('http://www.python.org/')
print f.read()
Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "download.py", line 22, in ?
    f = urllib2.urlopen('http://www.python.org/')
  File "d:\python24\lib\urllib2.py", line 130, in urlopen
    return _opener.open(url, data)
  File "d:\python24\lib\urllib2.py", line 364, in open
    response = meth(req, response)
  File "d:\python24\lib\urllib2.py", line 471, in http_response
    response = self.parent.error(
  File "d:\python24\lib\urllib2.py", line 402, in error
    return self._call_chain(*args)
  File "d:\python24\lib\urllib2.py", line 337, in _call_chain
    result = func(*args)
  File "d:\python24\lib\urllib2.py", line 480, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 407: Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied.  )
Meine Frage:
Wie gebe ich den Proxy-Server zum Downloaden an, bzw. wie funktioniert es?

Edit (Leonidas): Code in Python-Tags gesetzt, Fehlermeldung in Code-Tags.

Verfasst: Mittwoch 17. August 2005, 09:20
von Clython
Es gibt in der Klasse urllib2 eine Funktion ProxyBasicAuthHandler bzw. ProxyDigestAuthHandler. Die sollte es eigentlich tun. Frag mich einfach nicht wie man das genau braucht, das steht in meinem Buch nämlich nicht. Aber auf python.org werden Sie sicher geholfen :D

Verfasst: Mittwoch 17. August 2005, 11:02
von Leonidas
Oder wenn es etwas einfacher sein darf, dann geht auch urllib.urlopen(), wo du den Proxy auch direkt angeben kannst.

re:

Verfasst: Freitag 26. August 2005, 10:43
von HarryH
Hallo,

Danke für eure Beiträge!

Habe es nun folgendermaßen realisiert:

Code: Alles auswählen

import urllib2

# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib2.ProxyBasicAuthHandler()
auth_handler.add_password('realm', 'host', 'username', 'password')
opener = urllib2.build_opener(auth_handler)

# ...and install it globally so it can be used with urlopen.
urllib2.install_opener(opener)
side = urllib2.urlopen('http://www.python.org')
print side.read()
Nur noch eine Frage:
Wie kann ich es verhindern, das ich meinen Usernamen und mein Passwort
direkt in den Quellcode scheiben muss?

Verfasst: Freitag 26. August 2005, 11:12
von Clython
Das ist auch schon eines meiner Probleme gewesen. Entweder du gibst die Zugangsdaten bei jeder Benutzung per raw_input() ein, oder du schreibst Sie in eine Datei und liest diese dann aus. Geht am einfachsten mit einer py-Datei, die du per import zugänglich machst. Um den Inhalt ein bisschen zu schützen, empfiehlt es sich die Datei nur als pyc-Datei (d.h. als binärer Code) zu speichern.

Eine wirklich elegante und vor Missbrauch sichere Lösung kenne ich leider auch nicht.

Verfasst: Freitag 26. August 2005, 12:22
von ProgChild
Clython hat geschrieben:Eine wirklich elegante und vor Missbrauch sichere Lösung kenne ich leider auch nicht.
Es gibt keine. Wenn dein Script in der Lage ist, das passwort irgendwo her zu lesen, dann kann der Nutzer das auch.

Normalerweise läuft das ja so: Der Nutzer gibt das Passwort ein. Dein Script speichert es in einer Datei, damit der Nutzer es nicht jedesmal eingeben muss.

Vor dem Nutzer kannst du das Passwort also nicht verstecken. Zumindest nicht so, dass es nicht irgendwie wieder entschlüsselt werden kann, da es ja dein Script kann, welches der Nutzer in der Gewalt hat...

Verfasst: Sonntag 4. September 2005, 09:40
von Leonidas
In der pyc/pyo Datei stehen Strings ja auch im Klartext drin.. du kannst höchstens versuchen sie irgendwie (simpel und anfällig) zu verschlüsseln:

passwortmodul.py

Code: Alles auswählen

pass = 'murofnohtyp'
pass = pass[::-1]
(das dann als pyc/pyo verteilen, damit die Pseudo-Verschlüsselung nicht so einfach ersichtlich ist)

Programm:

Code: Alles auswählen

import passwortmodul
print passwortmodul.pass