简体   繁体   English

Python HTTP错误403禁止

[英]Python HTTP Error 403 Forbidden

I am a bit of a Python Newbie, and I've just been trying to get some code working. 我是一个Python新手,我一直试图让一些代码工作。

Below is the code, and also the nasty error I keep getting. 下面是代码,也是我不断得到的令人讨厌的错误。

 import pywapi import string google_result = pywapi.get_weather_from_google('Brisbane') print google_result def getCurrentWather(): city = google_result['forecast_information']['city'].split(',')[0] print "It is " + string.lower(google_result['current_conditions']['condition']) + " and " + google_result['current_conditions']['temp_c'] + " degree centigrade now in "+ city+".\\n\\n" return "It is " + string.lower(google_result['current_conditions']['condition']) + " and " + google_result['current_conditions']['temp_c'] + " degree centigrade now in "+ city def getDayOfWeek(dayOfWk): #dayOfWk = dayOfWk.encode('ascii', 'ignore') return dayOfWk.lower() def getWeatherForecast(): #need to translate from sun/mon to sunday/monday dayName = {'sun': 'Sunday', 'mon': 'Monday', 'tue': 'Tuesday', 'wed': 'Wednesday', ' thu': 'Thursday', 'fri': 'Friday', 'sat': 'Saturday', 'sun': 'Sunday'} forcastall = [] for forecast in google_result['forecasts']: dayOfWeek = getDayOfWeek(forecast['day_of_week']); print " Highest is " + forecast['high'] + " and "+ "Lowest is " + forecast['low'] + " on " + dayName[dayOfWeek] forcastall.append(" Highest is " + forecast['high'] + " and "+ "Lowest is " + forecast['low'] + " on " + dayName[dayOfWeek]) return forcastall 

Now is the error: 现在是错误:

 Traceback (most recent call last): File "C:\\Users\\Alex\\Desktop\\JAVIS\\JAISS-master\\first.py", line 5, in <module> import Weather File "C:\\Users\\Alex\\Desktop\\JAVIS\\JAISS-master\\Weather.py", line 4, in <module> google_result = pywapi.get_weather_from_google('Brisbane') File "C:\\Python27\\lib\\site-packages\\pywapi.py", line 51, in get_weather_from_google handler = urllib2.urlopen(url) File "C:\\Python27\\lib\\urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "C:\\Python27\\lib\\urllib2.py", line 400, in open response = meth(req, response) File "C:\\Python27\\lib\\urllib2.py", line 513, in http_response 'http', request, response, code, msg, hdrs) File "C:\\Python27\\lib\\urllib2.py", line 438, in error return self._call_chain(*args) File "C:\\Python27\\lib\\urllib2.py", line 372, in _call_chain result = func(*args) File "C:\\Python27\\lib\\urllib2.py", line 521, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) HTTPError: HTTP Error 403: Forbidden 

Thanks for any help I can get! 感谢您的帮助!

The 403 error doesn't come from your code but from Google. 403错误不是来自您的代码,而是来自Google。 Google lets you know that you don't have permission to access the resource you were requesting, in this case the weather API, because it has been discontinued (403 technically stands for Forbidden, they could also have gone for 404 Not Found or 410 Gone). 谷歌让你知道你没有权限访问你请求的资源,在这种情况下是天气API,因为它已经停止(403技术上代表禁止,他们也可能已经去了404 Not Found或410 Gone )。

For more information, read http://thenextweb.com/google/2012/08/28/did-google-just-quietly-kill-private-weather-api/ 有关详细信息,请参阅http://thenextweb.com/google/2012/08/28/did-google-just-quietly-kill-private-weather-api/

Other than that, your code is correct. 除此之外,您的代码是正确的。

It's not your error. 这不是你的错误。 Google discontinued its weather API a few time ago. 谷歌不久前停止了它的天气API。

If you need a free weather API I would recommend using the service I'm building, Metwit weather API . 如果您需要免费天气API我会建议使用我正在构建的服务,Metwit weather API This is the simplest working example using metwit-weather : 这是使用metwit-weather的最简单的工作示例:

from metwit import Metwit
weather = Metwit.weather.get(location_lat=45.45, location_lng=9.18)

Further examples are found here: http://soup.metwit.com/post/45997437810/python-weather-by-metwit 更多示例可在此处找到: http//soup.metwit.com/post/45997437810/python-weather-by-metwit

I am using Python3 and having the same issue. 我正在使用Python3并遇到同样的问题。 I found that Google blocks urllib that doesnt overwrite the User-Agent and Accept-Encoding headers. 我发现Google阻止了不会覆盖User-Agent和Accept-Encoding标头的urllib。

The headers it used for a test search: 它用于测试搜索的标头:

GET /search?q=f1+2015 HTTP/1.1
Accept-Encoding: identity
Connection: close
User-Agent: Python-urllib/3.4
Host: 127.0.0.1:8076

I put 'Accept-Encoding' to '' and 'User-Agent' to 'testing' and the 403 error stopped. 我将'Accept-Encoding'置于''和'User-Agent'进行'测试',403错误停止。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM