我需要从ksoap响应中获取一个http状态代码,以指定403-unauthorized之类的异常(我使用客户端证书进行身份验证 - 当证书无效时)。 我试图在ResponseProperties中找到一个http状态(我认为它应该在哪里),但我没有。
代码:
...
HttpsTransportSE transport=new HttpsTransportSE(host, port, service, timeout);
try {
SoapObject request=new SoapObject(namespace, method);
request.addProperty("param", param);
SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
transport.call(getStatusAction, envelope);
SoapPrimitive response=(SoapPrimitive)envelope.getResponse();
nRet=Integer.parseInt(response.toString());
}
catch(Exception e) {
// Here I can get HeaderProperties by transport.getConnection().getResponseProperties();
// But http status code is not present
e.printStackTrace();
}
...
感谢。
答案 0 :(得分:1)
在游戏进入很晚的时候,现在使用SOAP的人并不多......
当您捕获org.ksoap2.transport.HttpResponseException而不是Exception时,您可以获取HTTP响应代码
} catch (HttpResponseException httpException) {
int statusCode = httpException.getStatusCode();
List responseHeaders = httpException.getResponseHeaders();
} catch (Exception e) {
e.printStackTrace();
}
响应标头是标头属性对象,例如
0 = {HeaderProperty@4668}
key = null
value = "HTTP/1.1 404 Not Found"
1 = {HeaderProperty@4669}
key = "Content-Length"
value = "0"
答案 1 :(得分:0)
URL myurl = new URL(url);
URLConnection connection = myurl.openConnection();
connection.setConnectTimeout(20 * 1000);
HttpURLConnection httpConnection = (HttpURLConnection) connection;
int responseCode = -1;
if (responseCode == HttpURLConnection.HTTP_OK)
{
httpConnection.disconnect();
SoapObject request = new SoapObject(namespace, methodName);
//...
}
else if(...)
{
//...
}