来自 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?

AR-VR开发工具Sumerian技术来自于破产公司Goo

谷歌 Appengine 数据存储 - python

csharp 来自http://stackoverflow.com/questions/2510383/how-can-i-calculate-what-date-good-friday-falls-

Python:使用Python AppEngine作为Twitter的代理

Appengine 上 google Go 与 Python 和 Java 的资源使用情况