来自 Python AppEngine 的 Google Url Shortener API:HTTPError:HTTP 错误 403:禁止
Posted
技术标签:
【中文标题】来自 Python AppEngine 的 Google Url Shortener API:HTTPError:HTTP 错误 403:禁止【英文标题】:Google Url Shortener API from Python AppEngine: HTTPError: HTTP Error 403: Forbidden 【发布时间】:2014-09-10 18:34:16 【问题描述】:我在 AppEngine 生产环境中使用 Google URL Shortener API 时遇到问题。 在 Developers 控制台中,我打开了 URL Shortener API,并且也打开了 oAuth 2。最重要的是,我从 API 访问屏幕获得了简单的 API 访问浏览器密钥。
这就是问题所在。当我运行以下代码时,我在开发者控制台日志中得到“HTTPError: HTTP Error 403: Forbidden”。有趣的是,相同的代码在开发环境中正确地返回了短 url。
def goo_shorten_url(url):
post_url = 'https://www.googleapis.com/urlshortener/v1/url?fields=id'
logging.info('post_url: '.format(post_url))
postdata = 'longUrl':url
headers = 'Content-Type':'application/json'
req = urllib2.Request(
post_url,
json.dumps(postdata),
headers
)
ret = urllib2.urlopen(req).read()
print ret
return json.loads(ret)['id']
如果我在帖子 url 中包含 API 密钥,如下所示,
post_url = 'https://www.googleapis.com/urlshortener/v1/url?fields=id&key=MYAPIKEY'
Prod 和 Dev 都返回 HTTP 错误 403。
我怀疑这三个之一是正确的,但想听听你的想法。
需要 API 密钥,但我没有使用正确的 API 密钥。
不需要 API 密钥(这解释了为什么它在 Dev 中没有密钥的情况下工作),但我的 API 密钥错误导致 Prod 和 Dev 都失败。
Google 不允许应用程序以编程方式向其 Url Shorter API 提交 POST 请求。(这根本无法解释为什么它可以在 Dev 中工作)
感谢阅读。
产品
文件“/base/data/home/apps/s~myapp/1.377367579804576653/util/test_module.py”,第50行,在get 字符串 = goo_shorten_url(longurl) 文件“/base/data/home/apps/s~myapp/1.377367579804576653/util/JOTools.py”,第 41 行,在 goo_shorten_url ret = urllib2.urlopen(req).read() 文件“/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py”,第 127 行,在 urlopen return _opener.open(网址,数据,超时) 文件“/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py”,第 410 行,打开 响应=方法(请求,响应) http_response 中的文件“/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py”,第 523 行 'http', 请求, 响应, 代码, msg, hdrs) 文件“/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py”,第 448 行,错误 返回 self._call_chain(*args) _call_chain 中的文件“/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py”,第 382 行 结果 = 函数(*args) http_error_default 中的文件“/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py”,第 531 行 引发 HTTPError(req.get_full_url(), 代码, msg, hdrs, fp) HTTPError:HTTP 错误 403:禁止
使用 API 密钥开发
文件“C:_dev\eclipse-work\gae\MyProj\util\test_module.py”,第 50 行,在 get 字符串 = goo_shorten_url(longurl) 文件“C:_dev\eclipse-work\gae\MyProj\util\JOTools.py”,第 41 行,在 goo_shorten_url ret = urllib2.urlopen(req).read() 文件“C:\PYTHON27\lib\urllib2.py”,第 127 行,在 urlopen return _opener.open(网址,数据,超时) 文件“C:\PYTHON27\lib\urllib2.py”,第 410 行,打开 响应=方法(请求,响应) http_response 中的文件“C:\PYTHON27\lib\urllib2.py”,第 523 行 'http', 请求, 响应, 代码, msg, hdrs) 文件“C:\PYTHON27\lib\urllib2.py”,第 448 行,错误 返回 self._call_chain(*args) _call_chain 中的文件“C:\PYTHON27\lib\urllib2.py”,第 382 行 结果 = 函数(*args) http_error_default 中的文件“C:\PYTHON27\lib\urllib2.py”,第 531 行 引发 HTTPError(req.get_full_url(), 代码, msg, hdrs, fp) HTTPError:HTTP 错误 403:禁止
【问题讨论】:
【参考方案1】:Google 为此提供了一个很好的API。您可以测试您的请求here。希望这可以帮助。
【讨论】:
以上是关于来自 Python AppEngine 的 Google Url Shortener API:HTTPError:HTTP 错误 403:禁止的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Appengine和来自API的Python脚本流数据将数据流式传输到Google Cloud BigQuery?
csharp 来自http://stackoverflow.com/questions/2510383/how-can-i-calculate-what-date-good-friday-falls-