HTTPError:HTTP错误400:错误的请求urllib2

时间:2013-11-22 11:57:00

标签: python urllib2

我是python的初学者。我是Easy API Project(http://gcdc2013-easyapisproject.appspot.com)的开发人员,正在使用我的项目进行天气API的Python实现。访问http://gcdc2013-easyapisproject.appspot.com/APIs_Doc.html以查看Weather API。以下是我的实现,但它返回HTTPError: HTTP Error 400: Bad request错误。

import urllib2

def celsius(a):
    responsex = urllib2.urlopen('http://gcdc2013-easyapisproject.appspot.com/unitconversion?q='+a+' in celsius')
    htmlx = responsex.read()
    responsex.close()
    htmlx = html[1:] #remove first {
    htmlx = html[:-1] #remove last }
    htmlx = html.split('}{') #split and put each resutls to array
    return str(htmlx[1]);

print "Enter a city name:",
q = raw_input() #get word from user
response = urllib2.urlopen('http://gcdc2013-easyapisproject.appspot.com/weather?q='+q)
html = response.read()
response.close()
html = html[1:] #remove first {
html = html[:-1] #remove last }
html = html.split('}{') #split and put each resutls to array
print "Today weather is " + html[1]
print "Temperature is " + html[3]
print "Temperature is " + celsius(html[3])

请帮帮我..

2 个答案:

答案 0 :(得分:0)

应使用urllib.quoteurllib.quote_plus引用查询字符串:

import urllib
import urllib2

def celsius(a):
    responsex = urllib2.urlopen('http://gcdc2013-easyapisproject.appspot.com/unitconversion?q=' + urllib.quote(a + ' in celsius'))
    html = responsex.read()
    responsex.close()
    html = html[1:] #remove first {
    html = html[:-1] #remove last }
    html = html.split('}{') #split and put each resutls to array
    return html[0]

print "Enter a city name:",
q = raw_input() #get word from user
response = urllib2.urlopen('http://gcdc2013-easyapisproject.appspot.com/weather?q='+urllib.quote(q))
html = response.read()
print repr(html)
response.close()
html = html[1:] #remove first {
html = html[:-1] #remove last }
html = html.split('}{') #split and put each resutls to array
print "Today weather is " + html[1]
print "Temperature is " + html[3]
print "Temperature is " + celsius(html[3].split()[0])

除此之外,我修改了celsius以使用html代替htmlx。原始代码混合使用htmlhtmlx

答案 1 :(得分:0)

我找到了答案。该查询应引用urllib2.quote(q)