从Python 2.xx翻译为3.6

时间:2017-05-26 19:16:44

标签: python urllib2 urllib

有人可以帮助将以下代码从2.xx转换为3.6吗?我相信我所遇到的问题源于urllib2库已更改的事实。

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

我已经对@ t.m.adam的代码进行了建议编辑,现在收到以下错误:

追踪(最近一次通话):   文件“C:/Users/map/PycharmProjects/Reverb/SSAPI.py”,第37行,     response_body = urlopen(request).read()   文件“C:\ Users \ map \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ urllib \ request.py”,第223行,在urlopen中     return opener.open(url,data,timeout)   文件“C:\ Users \ map \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ urllib \ request.py”,第524行,打开     req = meth(req)   do_request_中的文件“C:\ Users \ map \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ urllib \ request.py”,第1248行     提出TypeError(msg) TypeError:POST数据应该是字节,可迭代的字节或文件对象。它不能是str类型。

关于为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:0)

Requesturlopen是python 3中urllib.request的一部分。
如果更改导入,仍可以使用脚本:

from urllib.request import Request, urlopen

同样打印是python 3中的一个函数。所以使用它:

print(response_body)