以下是我通过测试发现的内容。最初我经历了相同的步骤并收到了相同的错误,但值得注意的是输出中的条目INFO client.py:669 access_token is expired:
MobileAssistant-Data> appcfg.py upload_data --config_file bulkloader.yaml --url=http://localhost:8080/remote_api --filename places.csv --kind=Place -e myEmailAddress@gmail.com
05:12 PM Uploading data records.
[INFO ] Logging to bulkloader-log-20151112.171238
[INFO ] Throttling transfers:
[INFO ] Bandwidth: 250000 bytes/second
[INFO ] HTTP connections: 8/second
[INFO ] Entities inserted/fetched/modified: 20/second
[INFO ] Batch Size: 10
2015-11-12 17:12:38,466 INFO client.py:669 access_token is expired. Now: 2015-11-12 22:12:38.466000, token_expiry: 2015-11-06 01:33:21
Error 302: --- begin server output ---
这看起来有点像我在开发服务器的远程API处理程序中看到的一个问题,该问题在ClientLogin被弃用之后浮出水面(但在Python SDK中)。只是为了测试,我编辑了build.gradle以使用最新的SDK版本(从1.9.18升级到1.9.28),然后再次运行它:
MobileAssistant-Data> appcfg.py upload_data --config_file bulkloader.yaml --url=http://localhost:8080/remote_api --filename places.csv --kind=Place -e myEmailAddress@gmail.com
05:16 PM Uploading data records.
[INFO ] Logging to bulkloader-log-20151112.171615
[INFO ] Throttling transfers:
[INFO ] Bandwidth: 250000 bytes/second
[INFO ] HTTP connections: 8/second
[INFO ] Entities inserted/fetched/modified: 20/second
[INFO ] Batch Size: 10
2015-11-12 17:16:15,177 INFO client.py:669 access_token is expired. Now: 2015-11-12 22:16:15.177000, token_expiry: 2015-11-06 01:33:21
2015-11-12 17:16:15,565 INFO client.py:669 access_token is expired. Now: 2015-11-12 22:16:15.565000, token_expiry: 2015-11-06 01:33:21
2015-11-12 17:16:15,573 INFO client.py:571 Refreshing due to a 401 (attempt 1/2)
2015-11-12 17:16:15,575 INFO client.py:797 Refreshing access_token
2015-11-12 17:16:16,039 INFO client.py:571 Refreshing due to a 401 (attempt 2/2)
2015-11-12 17:16:16,040 INFO client.py:797 Refreshing access_token
... (ad infinitum)
这个输出现在与Python远程API问题完全相同。因此,似乎Java远程API存在相同的问题(身份验证检查未正确更新以使用新的身份验证方案)。
在Python中的解决方法是手动编辑SDK源代码并取消身份验证检查。我怀疑Java SDK需要类似的黑客攻击。不过,这并不像SDK那样直接,因为SDK需要从源代码重新构建。
如果我发现任何其他信息,我将用我的发现更新这个答案。请注意,这应该与部署的应用程序完美地工作,只有开发服务器受到影响。
更新:
罪魁祸首是
com/google/apphosting/utils/remoteapi/RemoteApiServlet.java中的管理员检查,与上述Python SDK中的相同问题。不幸的是,你不能轻松地从源代码重新构建SDK,因为build.xml中的构建目标仅包括“jsr107cache”,其余的构建都是从预生成的二进制文件完成的。看起来我们将不得不等待直到这在未来的版本中得到修复,但现在我将更新公共错误。
目前,我建议您坚持使用文档,并仅使用部署的应用程序版本进行remote_api上传。
--noauth_local_webserver
命令行参数吗? - Fábio Uechi