谷歌应用引擎(在 java 运行时)遇到了一个有趣的问题。从应用程序引擎任务/视图中,我正在尝试联系外部 Web 服务 API。
外部 API 使用 OAuth 进行身份验证,并且仅接受通过 SSL 的请求。我正在调用的特定方法是 POST 请求。
选项 1:使用 AppEngine URLFetch 服务。但是,我看不到进行 OAuth 签名的方法。URL Fetch 使用 java.net HttpURLConnection,它流式传输它的请求,排除签名。我的首选 java OAuth 库是oauth-signpost,但由于这个原因它不支持 java.net。是否有与 HttpURLConnection 兼容的 OAuth 库?
选项 2:使用另一个 URL 获取库。我最喜欢的 HTTP 库是apache commons HTTP library。但是,这在使用 SSL 时会导致问题,因为 javax.ssl 被应用引擎沙箱禁止。尝试通过 SSL 使用 apache 库时出现以下错误:
java.lang.NoClassDefFoundError: javax.net.ssl.KeyManagerFactory is a restricted class. Please see the Google App Engine developer's guide for more details.
at javax.net.ssl.KeyManagerFactory.<clinit>(KeyManagerFactory.java)
at org.apache.http.conn.ssl.SSLSocketFactory.createSSLContext(SSLSocketFactory.java:223)
我假设是因为您不能直接打开套接字。
这都是 OAuth / POST / SSL / App 引擎的悲哀融合,我看不到出路。很想听听任何和所有的建议=)