Ich versuche, Parameter zu schreiben und die umgeleitete Seite von Input zu lesen, aber ich weiß nichts von dieser AusnahmeHttpURLConnection illegale staatliche Ausnahme: connected bereits
Exception in thread "main" java.lang.IllegalStateException: Already connected
at java.net.URLConnection.setDoOutput(URLConnection.java:900)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.setDoOutput(HttpsURLConnectionImpl.java:455)
at com.company.Main.main(Main.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Code:
try {
CookieHandler cookieHandler = null;
CookieManager.setDefault(cookieHandler);
HttpURLConnection urlConnection = (HttpURLConnection) new URL("site").openConnection();
InputStream i = new BufferedInputStream(urlConnection.getInputStream());
StringBuilder stringBuilder =new StringBuilder();
int c;
while ((c=i.read())!=-1){
stringBuilder.append((char)c);
}
// for getting the post paramters that is user name and password field
Pattern p = Pattern.compile("<input name=\"\\w{22}\" type=\"text\" id=\"\\w{22}\" />");
Matcher matcher = p.matcher(stringBuilder.toString());
String user_name = null;
while (matcher.find()){
user_name = matcher.group().split("\"")[1];
}
String password = null;
p= Pattern.compile("<input name=\"\\w{22}\" type=\"password\" id=\"\\w{22}\" />");
matcher= p.matcher(stringBuilder.toString());
while (matcher.find()){
password = matcher.group().split("\"")[1];
}
System.out.print(user_name + " " + password);
String urlParameters = user_name+"=xyz&"+password+"=xyz";
byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length;
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
urlConnection.setRequestMethod("POST");
urlConnection.setRequestMethod(Integer.toString(postDataLength));
Writer writer = new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream()));
writer.write(urlParameters);
writer.flush();
urlConnection.setDoInput(true);
urlConnection.getContent();
while ((c=i.read())!=-1){
System.out.print((char)c);
}
} catch (IOException e) {
e.printStackTrace();
}
Eigentlich brauche ich die get Parameter zur Laufzeit caz die Seite, für die ich es verwende, hat es post-Parameter hat session-basierte Verschlüsselung. SO, zuerst muss ich diesen Parameter bekommen und dann muss ich es posten .... Nebenbei habe ich getan, was Sie sagten, aber ich bekomme eine andere Ausnahme, die java.net.ProtocolException ist: Ungültige HTTP-Methode: 60 –
"HttpURLConnection ist nicht zur Wiederverwendung gedacht "Ich muss daran denken, danke! –
@Broken_Window Die meisten Klassen sind nicht zur Wiederverwendung vorgesehen. Ausnahmen davon sind in der Regel selten und irgendwie logisch: Dateihandles, Datenbankhandles, Threads .. – Gewure