2017-05-26 15 views
0

Kann jemand bitte helfen, den folgenden Code von 2.xx nach 3.6 zu übersetzen? Ich glaube, dass die Probleme, die ich habe, von der Tatsache herrühren, dass sich die urllib2-Bibliothek geändert hat.Von Python 2.xx auf 3.6 übersetzen

from urllib2 import Request, urlopen 

values = """ 
    { 
    "carrierCode": "fedex", 
    "serviceCode": null, 
    "packageCode": null, 
    "fromPostalCode": "78703", 
    "toState": "DC", 
    "toCountry": "US", 
    "toPostalCode": "20500", 
    "toCity": "Washington", 
    "weight": { 
     "value": 3, 
     "units": "ounces" 
    }, 
    "dimensions": { 
     "units": "inches", 
     "length": 7, 
     "width": 5, 
     "height": 6 
    }, 
    "confirmation": "delivery", 
    "residential": false 
    } 
""" 

headers = { 
    'Content-Type': 'application/json', 
    'Authorization': '< Enter your Basic Authorization string here >' 
} 
request = Request('https://ssapi.shipstation.com/shipments/getrates', 
data=values, headers=headers) 

response_body = urlopen(request).read() 
print response_body 

Ich habe die vorgeschlagenen Änderungen an dem Code von @tmadam gemacht und jetzt bin immer folgende Fehlermeldung:

Traceback (jüngste Aufforderung zuletzt): Datei „C:/Users/map/PycharmProjects/Reverb/SSAPI.py ", Zeile 37, in response_body = urlopen (request) .read() Datei" C: \ Benutzer \ map \ AppData \ Lokale \ Programme \ Python \ Python36-32 \ lib \ urllib \ request.py ", Zeile 223, in urlopen return opener.open (URL, Daten, Timeout) Datei" C: \ Benutzer \ map \ AppData \ Lokale \ Programme \ Python \ Python36-32 \ lib \ urllib \ request. py ", Zeile 524, in geöffnet req = meth (req) Datei "C: \ Benutzer \ map \ AppData \ Lokale \ Programme \ Python \ Python36-32 \ lib \ urllib \ request.py", Zeile 1248, in do_request_ Erheben TypeError (msg) TypeError: POST-Daten sollten Bytes, ein iterierbares Byte oder ein Dateiobjekt sein. Es kann nicht vom Typ str sein.

Irgendwelche Ideen, warum das passiert?

Antwort

0

Request und urlopen sind Teil urllib.request in Python 3.
Sie noch Ihr Skript verwenden können, wenn Sie Ihre Importe ändern:

from urllib.request import Request, urlopen 

auch Druck ist eine Funktion in Python 3. es also so verwenden :

print(response_body) 
+0

Hey @tmadam Ich habe diese Änderungen gemacht, aber jetzt bekomme ich einen Fehler. Ich habe meinen vorherigen Beitrag bearbeitet, um diesen Fehler zu reflektieren. Irgendwelche Ideen? – bhess

+0

Ja, POST-Daten sollten Bytes sein. Sie können dieses Problem lösen, wenn Sie 'Werte' kodieren, zB:' Werte = Werte.encode ("utf-8") ' –