Über proxy-server downloaden?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

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.
Gruß, Harry
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Oder wenn es etwas einfacher sein darf, dann geht auch urllib.urlopen(), wo du den Proxy auch direkt angeben kannst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

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?
Gruß, Harry
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

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.
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

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...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten