使用谷歌应用引擎(在Java运行时)进入一个有趣的问题。在app引擎任务/视图中,我正在尝试联系外部Web服务API。
外部API使用OAuth进行身份验证,仅接受通过SSL的请求。我正在调用的特定方法是POST请求。
选项1:使用AppEngine URLFetch服务。但是,我没有看到OAuth签名的方法。 URL Fetch使用java.net HttpURLConnection,它会对其请求进行流式处理,从而排除签名。我的首选java OAuth库是oauth-signpost,但由于这个原因,它不支持java.net。是否有与HttpURLConnection兼容的OAuth库?
选项2:使用其他网址抓取库。我最喜欢的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 / POSTs / SSL / App引擎的一个令人遗憾的汇合,我不太明白。很想听到任何和所有的建议=)
答案 0 :(得分:1)
HttpClient should work in AppEngine,如果您使用包装UrlFetch的自定义ConnectionManager。详细信息为here和here。