Ich habe die folgende Methode, die einen Proxy verwendet, um Informationen von einem Server abzurufen. Manchmal aufgrund einer schlechten Proxy ich SocketException
bekommen, SSLException
, SSLHandshakeException
oder ConnectException
Versuchen Sie Methode auf bestimmten Ausnahmen
Wie Sie in meiner Methode sehen kann ich schon bin mit catch (IOException ioe)
ich tun muss, dass, um den Inhalt der Serverantwort zu erhalten, wenn der Server etwas zurückgibt anders als Code 200.
Wie kann ich die Methode wiederholen im Falle der oben genannten Ausnahmen?
public String getMeta() throws IOException
{
HttpsURLConnection con = null;
InputStream is = null;
StringWriter writer = new StringWriter();
try
{
String url = "https://api.myapp.com/meta";
URL urlObj = new URL(url);
if (useProxy && fullProxy)
{
myapp.Proxy proxyCustom = getRandomProxy();
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyCustom.getProxyIp(), proxyCustom.getProxyPort()));
con = (HttpsURLConnection) urlObj.openConnection(proxy);
}
else
{
con = (HttpsURLConnection) urlObj.openConnection();
}
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Content-Type", "application/json; charset=utf-8");
con.setRequestProperty("host", urlObj.getHost());
con.setRequestProperty("Connection", "Keep-Alive");
int responseCode = 0;
responseCode = con.getResponseCode();
is = con.getInputStream();
writer = new StringWriter();
IOUtils.copy(is, writer, "UTF-8");
}
catch (IOException ioe)
{
if (con instanceof HttpsURLConnection)
{
HttpsURLConnection httpConn = (HttpsURLConnection) con;
int statusCode = httpConn.getResponseCode();
if (statusCode != 200)
{
is = httpConn.getErrorStream();
writer = new StringWriter();
IOUtils.copy(is, writer, "UTF-8");
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return writer.toString();
}
Verwenden Sie eine Schleife oder Rekursion. Wenn Sie diesen Kram und endlose Rekursion/Schleifen vermeiden wollen, setzen Sie einfach alles aus dem Try-Block ohne zusätzliche Logik in eine neue Methode. Welche können Sie dann ein anderes Mal anrufen. – HopefullyHelpful
'Wie kann ich die Methode wiederholen lassen? Möchten Sie es erneut versuchen oder kontinuierlich wiederholen, bis keine Ausnahme ausgelöst wird? – copeg
@copeg Ich hoffe, es gibt eine einfache Möglichkeit zu bestimmen, wie oft es versuchen sollte, aber es ist zu kompliziert, ich werde es nur einmal versuchen. – Arya