我尝试使用GAE技术发送https请求。但是,如果我使用
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
它会崩溃
java.lang.ClassCastException: com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler $连接 无法转换为javax.net.ssl.HttpsURLConnection
如果我将HttpsURLConnection
更改为HttpURLConnection
,一切都会正常,但我不认为会使用https优势。那么如何正确发送https请求呢?
答案 0 :(得分:2)
我认为,[
{
"Id": "1",
"Nome": "Bing",
"NomeBuscaNaApi": "",
"NomeResource": "Bing",
},
{
"Id": "2",
"Nome": "Personalizado",
"NomeBuscaNaApi": "",
"NomeResource": "Personalizado",
},
...
]
属于obj
类型。
简单来说,在这种情况下你不应该使用java.net.URL
。
javax.net.ssl.HttpsURLConnection
方法返回类型URL#openConnection()
,并且几乎不提供任何子类型保证(除了奇怪的javadoc描述,请参阅下面的*),Google使用它。
您的申请不应该依赖java.net.URLConnection
的具体内容。有两种选择:
HttpsURLConnection
- 由API保证,URLConnection
,因为HttpURLConnection
扩展了它,并且不太可能被更改。在这两种情况下,都会使用HTTPS功能;铸造不会改变物体的性质。
其他情况是GAE中的客户证书 - 请参阅Client Authentication by Certificate in GAE java queston。
*奇怪的是,URLFetchServiceStreamHandler$Connection
的javadoc说:
如果对于URL的协议(例如HTTP或JAR),存在属于以下某个包或其子包之一的公共专用URLConnection子类:java.lang,java.io,java .util,java.net,返回的连接将是该子类。例如,对于HTTP,将返回HttpURLConnection,对于JAR,将返回JarURLConnection。
(来源:https://docs.oracle.com/javase/8/docs/api/java/net/URL.html#openConnection)
HttpsConnction不在任何提及的包中,因此Google可以自由提供它想要的任何类型。但是这样的描述可以在将来添加URL.openConnection
- 例如 - HttpsURLConnection
包,然后AppEngine实现将不再相关。这只是猜测,很可能永远不会发生 - 但不能保证! :)
答案 1 :(得分:0)
HttpURLConnection对我有用