为什么urllib2不接受我的URL?

时间:2012-08-25 16:57:18

标签: python-2.7 urllib2

我有一个存储在列表中的URL,应该传递给urllib2。但是,urllib似乎并不喜欢这个,我只是不明白为什么!

这是我得到的:

url = list[1]
response = urllib2.urlopen(url)
html = response.read()

该网址是Google地图路线Web API网址:

http://maps.googleapis.com/maps/api/directions/json?origin=[origin]&destination=[destination]&waypoints=optimize:true|[waypoint1]|[waypoint2]&sensor=false

现在,如果我尝试运行它,检索到的html总是看起来像这样:

{
"routes" : [],
"status" : "INVALID_REQUEST"
}

表明传递的URL有问题。但是,如果我使用URL并直接指定它,如下所示:

url = "http://maps.googleapis.com/maps/api/directions/json?origin=[origin]&destination=[destination]&waypoints=optimize:true|[waypoint1]|[waypoint2]&sensor=false"
response = urllib2.urlopen(url)
html = response.read()

结果将很高兴地通过(对我来说)基本终端部分看起来像这样:

         "warnings" : [],
         "waypoint_order" : [ 2, 0, 7, 5, 6, 4, 3, 1 ]
      }
   ],
   "status" : "OK"
}

因此,我的(希望不是太愚蠢)问题是:为什么urllib在直接分配URL时才能完成工作,但如果它来自列表则不行?

非常感谢你的帮助, Ĵ

PS:为什么论坛软件总是切断我的'大家好'的问候?

1 个答案:

答案 0 :(得分:0)

我终于解决了这个问题!

一旦我退后一步再考虑一下,这很容易: 我确实从谷歌的Web API得到了答案,这意味着urllib2确实传递了的东西。但是,它必须发送一些对API后端没有任何意义的东西。包含德语地址的URL我很幸运地猜到问题是由变音符号引起的。

所以我只是简单地通过一个函数传递了我的URL,用一个非变音符替代每个变音符号,突然一切似乎都运行正常。

如果有人遇到类似的问题,我就是这样解决的:

# Function for replacing all umlauts
def replaceUmlauts(text):
    dic = {'Ä':'Ae', 'ä':'ae', 'Ö':'Oe', 'ö':'oe', 'Ü':'Ue', 'ü':'ue', 'ß':'ss'}
    for i, j in dic.iteritems():
        text = text.replace(i, j)
    return text

然后只需使用

response = urllib2.urlopen(replaceUmlauts(url))