Forum: PC-Programmierung Python und Proxy Problem unter WinXP


von Heinz (Gast)


Lesenswert?

Hallo zusammen,

Ich habe ein kleines Programm zur Messdatenerfassung (via RS232) in 
Python geschrieben. Als refferenz für die Messdaten will ich die 
aktuellen Wetterdaten (von der Google Weather API) mitloggen.

Dies funtioniert zuhause auch sehr gut und zuverlässig. Leider sitze ich 
aber in der Firma hinter einem Proxy und habe hier nur windowsXP als 
platform.

Die Proxy configuration bekommt der Browser automatisch via "function 
FindProxyForURL(url, host){"

Aus dem script habe ich mir den Proxy namen geschnappt und in mein 
Python 2.7 Programm eingebaut (via urllib2).

Leider habe ich jetzt festgestellt, das die Abfrage der Google API nur 
über das skript funktioniert, wenn auch der Internet Explorer geöffnet 
ist, und auch regelmäßig seiten aufgerufen werden. Ist der Browser 
geschlossen oder es werden für eine bestimte Zeit keine Webseiten 
abgerufen, läuft mein code auch nicht mehr.

Hier der Python code-schnippsel:
1
def getWeather(city):
2
    #create google weather api url 
3
    url = "http://www.google.com/ig/api?weather="+str(city) 
4
   
5
    proxy_handler = rllib2.ProxyHandler 'http': 'http://XXXXXXX.com:8080/'})
6
    proxy_auth_handler = urllib2.ProxyBasicAuthHandler()
7
    proxy_auth_handler.add_password('xxxxxxx', XXXXX.com', 'XXXXXXX', 'XXXXXXX')
8
    
9
    opener = urllib2.build_opener(proxy_handler, proxy_auth_handler)
10
    
11
    try: 
12
    #open google weather api url
13
        f = opener.open(url) 
14
    except: 
15
    #if there is an error opening the url
16
        return "Error_opening_url" 
17
18
    # read contents to string 
19
    s = f.read() 
20
    # extract weather condition data from xml string 
21
    web_temp = s.split('<temp_c data="')[-1].split("\"")[0] 
22
    web_humi = s.split('<humidity data="Humidity: ')[-1].split("\"")[0] 
23
    web_cond = s.split('<current_conditions><condition data="')[-1].split("\"")[0] 
24
  
25
    # if there was an error getting the condition
26
    if web_cond == "<?xml version=": 
27
        return "XML_error" 
28
 
29
    #return the weather condition 
30
    return web_temp+';'+web_humi+';'+web_cond

eventuell hat einer von Euch eineIdee oder ein Tipp, leider kenne ich 
mich mit Proxy und speziell mit der Windows-welt nicht besonders gut 
aus.

vielen Dank für eure hilfe!
gruß
heinz

von Heinz (Gast)


Lesenswert?

Kleiner copy/past fehler, heißt im programm
1
proxy_handler = urllib2.ProxyHandler 'http': 'http://XXXXXXX.com:8080/'})

von Krapao (Gast)


Lesenswert?

Sicher, da fehlen doch Klammern, oder?
1
proxy_handler = urllib2.ProxyHandler({'h**p': 'h**p://www.example.com:3128/'})

http://docs.python.org/library/urllib2.html
http://docs.python.org/release/2.5.2/lib/urllib2-examples.html

Mein Verdacht: Bist du sicher dass du ein gültiges proxy_auth_handler 
bekommst und die Passwortdaten dort erfolgreich hinsenden kannst? Man 
muss diesen AuthHandler nicht benutzen, sondern kann den opener auch 
ohne anlegen.
1
import urllib2
2
proxy_handler = urllib2.ProxyHandler({"http": "http://john:blah@localhost:3128"})
3
print urllib2.build_opener(proxy_handler).open('http://python.org/').read()
http://www.velocityreviews.com/forums/t356012-urllib2-through-basic-authed-proxy.html

von Peter II (Gast)


Lesenswert?

eventuell will ja der Proxy eine Windows-anmeldung. Dabei wird von der 
Lokalen anmeldung das Ticket an den Proxy weitergereicht. (man muss also 
kein Kennwort bei proxy eingeben)

Soetwas macht in vielen Anwendungen Probleme.

von Krapao (Gast)


Lesenswert?

Mit dem Weg oben, bekomme ich aktuell für Dubai 37;47%;Clear

von Heinz (Gast)


Lesenswert?

Peter II schrieb:
> eventuell will ja der Proxy eine Windows-anmeldung. Dabei wird von der
>
> Lokalen anmeldung das Ticket an den Proxy weitergereicht. (man muss also
>
> kein Kennwort bei proxy eingeben)
>
>
>
> Soetwas macht in vielen Anwendungen Probleme.


Hallo,

Ja soetwas vermute ich. Ich dachte halt ich kann mit der "manuellen" 
Auth das quasi überschreiben?

gruß
heinz

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.