2014-11-04 85 views
-1

我试图使用java自动登录,并且使用了这个例子:http://www.mkyong.com/java/how-to-automate-login-a-website-java-example/帮助我用另一个网站来完成它。代码如下,输出也是如此。我的问题是,错误是什么意思,我该如何解决?Java登录'异常错误'是什么意思?

public class testing { 

    private List<String> cookies; 
    private HttpsURLConnection conn; 

    private final String USER_AGENT = "Mozilla/5.0"; 

    public static void main(String[] args) throws Exception { 

String url = "https://www.studentinvestor.org/secure/login.php?dest=http://www.studentinvestor.org/stock-list.php"; 
String companies = "http://www.studentinvestor.org/stock-list.php"; 

testing http = new testing(); 

// make sure cookies is turn on 
CookieHandler.setDefault(new CookieManager()); 

// 1. Send a "GET" request, so that you can extract the form's data. 
String page = http.GetPageContent(url); 
String postParams = http.getFormParams(page, "username", ",password"); 

// 2. Construct above post's content and then send a POST request for 
// authentication 
http.sendPost(url, postParams); 

// 3. success then go to gmail. 
String result = http.GetPageContent(companies); 
System.out.println(result); 
    } 

    private void sendPost(String url, String postParams) throws Exception { 

URL obj = new URL(url); 
conn = (HttpsURLConnection) obj.openConnection(); 

// Acts like a browser 
conn.setUseCaches(false); 
conn.setRequestMethod("POST"); 
conn.setRequestProperty("Host", "www.studentinvestor.org"); 
conn.setRequestProperty("User-Agent", USER_AGENT); 
conn.setRequestProperty("Accept", 
    "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
conn.setRequestProperty("Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6"); 
for (String cookie : this.cookies) { 
    conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]); 
} 
conn.setRequestProperty("Connection", "keep-alive"); 
conn.setRequestProperty("Content-Type", "text/html"); 


conn.setDoOutput(true); 
conn.setDoInput(true); 

// Send post request 
DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); 
wr.writeBytes(postParams); 
wr.flush(); 
wr.close(); 

int responseCode = conn.getResponseCode(); 
System.out.println("\nSending 'POST' request to URL : " + url); 
System.out.println("Post parameters : " + postParams); 
System.out.println("Response Code : " + responseCode); 

BufferedReader in = 
     new BufferedReader(new InputStreamReader(conn.getInputStream())); 
String inputLine; 
StringBuffer response = new StringBuffer(); 

while ((inputLine = in.readLine()) != null) { 
    response.append(inputLine); 
} 
in.close(); 
// System.out.println(response.toString()); 

    } 

    private String GetPageContent(String url) throws Exception { 

URL obj = new URL(url); 
conn = (HttpsURLConnection) obj.openConnection(); 

// default is GET 
conn.setRequestMethod("GET"); 

conn.setUseCaches(false); 

// act like a browser 
conn.setRequestProperty("User-Agent", USER_AGENT); 
conn.setRequestProperty("Accept", 
    "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 
conn.setRequestProperty("Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6"); 
if (cookies != null) { 
    for (String cookie : this.cookies) { 
     conn.addRequestProperty("Cookie", cookie.split(";", 1)[0]); 
    } 
} 
int responseCode = conn.getResponseCode(); 
System.out.println("\nSending 'GET' request to URL : " + url); 
System.out.println("Response Code : " + responseCode); 

BufferedReader in = 
     new BufferedReader(new InputStreamReader(conn.getInputStream())); 
String inputLine; 
StringBuffer response = new StringBuffer(); 

while ((inputLine = in.readLine()) != null) { 
    response.append(inputLine); 
} 
in.close(); 

// Get the response cookies 
setCookies(conn.getHeaderFields().get("Set-Cookie")); 

return response.toString(); 

    } 

    public String getFormParams(String html, String username, String password) 
    throws UnsupportedEncodingException { 

System.out.println("Extracting form's data..."); 

Document doc = Jsoup.parse(html); 

// Google form id 
Element loginform = doc.getElementById("loginsubmitted"); 
Elements inputElements = loginform.getElementsByTag("label"); 
List<String> paramList = new ArrayList<String>(); 
for (Element inputElement : inputElements) { 
    String key = inputElement.attr("name"); 
    String value = inputElement.attr("value"); 

    if (key.equals("team-name")) 
     value = username; 
    else if (key.equals("team-password")) 
     value = password; 
    paramList.add(key + "=" + URLEncoder.encode(value, "UTF-8")); 
    } 

// build parameters list 
StringBuilder result = new StringBuilder(); 
for (String param : paramList) { 
    if (result.length() == 0) { 
     result.append(param); 
    } else { 
     result.append("&" + param); 
    } 
} 
return result.toString(); 
    } 

    public List<String> getCookies() { 
    return cookies; 
    } 

public void setCookies(List<String> cookies) { 
this.cookies = cookies; 
    } 

} 

输出

Sending 'GET' request to URL : https://www.studentinvestor.org/secure/login.php? dest=http://www.studentinvestor.org/stock-list.php 
Response Code : 200 
Extracting form's data... 

Sending 'POST' request to URL : https://www.studentinvestor.org/secure/login.php? dest=http://www.studentinvestor.org/stock-list.php 
Post parameters : 
Response Code : 200 
Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.http.HttpURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection 
    at testing.GetPageContent(testing.java:98) 
    at testing.main(testing.java:44) 

因此该错误信息是:

Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.http.HttpURLConnection cannot be cast to javax.net.ssl.HttpsURLConnection 
     at testing.GetPageContent(testing.java:98) 
     at testing.main(testing.java:44) 
+0

你知道你复制了多少代码?你明白铸造是什么,以及第44行发生了什么? – 2014-11-04 17:12:05

+0

哪一行是98行的测试? – 2014-11-04 17:12:12

+0

44行是\t String result = http.GetPageContent(companies); 98行是\t conn =(HttpsURLConnection)obj.openConnection();.我害怕我是一个noob,因此除了非常基本的东西以外不太了解,所以我很感激你向我解释什么是铸造 – 2014-11-04 17:13:40

回答

0

愚蠢的我!如果您遇到此错误,请确保您的网址是HTTPS,而不仅仅是http或www!

0

看例外:sun.net.www.protocol.http.HttpURLConnection不能转换到javax.net.ssl.HttpsURLConnection中

这里需要URL的协议应为HTTPS而不是HTTP。

因此使用下面的代码,将解决你的问题:

字符串公司= “https://www.studentinvestor.org/stock-list.php”;