bash脚本登录网页

时间:2012-09-03 23:39:50

标签: bash post curl login

我正在尝试登录this page,但我不能为我的生活让它发挥作用。当我连接到学校的wifi时,我必须登录这个网站才能开始会话。

到目前为止,我已经尝试使用bash和cUrl来实现这一点,但只是让自己头疼。会工作还是我走错了路?非常感谢任何帮助!

谢谢,

<磷>氮

这是我试过的:

curl --cookie-jar cjar --output /dev/null http://campus.fsu.edu/webapps/login/

curl --cookie cjar --cookie-jar cjar \
    --data 'username=foo' \
    --data 'password=bar' \
    --data 'service=http://campus.fsu.edu/webapps/login/' \
    --data 'loginurl=http://campus.fsu.edu/webapps/login/bb_bb60/logincas.jsp' \
    --location \
    --output ~/loginresult.html \
        http://campus.fsu.edu/webapps/login/

4 个答案:

答案 0 :(得分:3)

有些事情你显然做错了 - 你的表格看起来像这样:

<form onsubmit="return validate_form(this)" method="post" action="https://bb5.fsu.edu/cas/" id="login" AUTOCOMPLETE="off">
<!-- etc -->  
</form>

您需要将您的请求提交到表单的“操作”URL,并且您需要将其作为POST请求而不是对其他URL的GET请求。

答案 1 :(得分:2)

curl -c vh.cookie "http://campus.fsu.edu/webapps/login/bb_bb60/logincas.jsp?username=foor&password=bar"

 curl -b vh.cookie "http://campus.fsu.edu/webapps/login/login.result"

其中http://campus.fsu.edu/webapps/login/login.result是用户通过身份验证后的结束网址

所以最初验证然后 - 再次调用curl并将cookie加载到经过身份验证的URL

答案 2 :(得分:1)

我设法用python和mechanize做到了这一点。应该也适合你:

http://stockrt.github.com/p/handling-html-forms-with-python-mechanize-and-BeautifulSoup/

您还可以下载selenium插件并将您的登录方案导出为python,ruby或java脚本。下载了一些库后,您将实现相同的目标。

答案 3 :(得分:1)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map.Entry;
import java.util.Vector;


public class AuthUrl {
    String username="";
    String password="";
    private Boolean error=false;
    private static final String conurl="campus.fsu.edu";
    private static final String  auth_url="http://campus.fsu.edu/webapps/loggedin.htm";


    public AuthUrl() {}


    public AuthUrl( String username, String password) { 
        this.username = username;
        this.password = password;   
    }




    public String Result()  {


    String url = "http://"+conurl+"/webapps/login/bb_bb60/logincas.jsp";
    String charset = "UTF-8";


    StringBuilder sba=new StringBuilder();
    sba.append("Username: "+username+"  ("+conurl+")<br>");
    try {
        String query = String.format("qualifier=%s&username=%s&password=%s",
                URLEncoder.encode(username, charset),
                URLEncoder.encode(password, charset));

        HttpURLConnection authi = (HttpURLConnection) new URL(url + "?" + query).openConnection();
        authi.connect();


        StringBuilder sb = new StringBuilder();
        // find the cookies in the response header from the first request
        List<String> cookies = authi.getHeaderFields().get("Set-Cookie");
        if (cookies != null) {
            for (String cookie : cookies) {
                if (sb.length() > 0) {
                    sb.append("; ");
                }
                // only want the first part of the cookie header that has the value
                String value = cookie.split(";")[0];
                sb.append(value);
            }

        }

        //If authentication passed the Location field will have a value
        //however the user has put in invalid details the Location within header will be null
        List<String> location = authi.getHeaderFields().get("Location");
        if (location == null) {
             error=true;
        } 

        if (error==false) {   

        // build request cookie header to send on all subsequent requests
        String cookieHeader = sb.toString();

        // with the cookie header your session should be preserved
           // Now connect to authenticated url - and show its contents  
        URL regUrl = new URL(auth_url);
        HttpURLConnection regCon = (HttpURLConnection) regUrl.openConnection();
        regCon.setRequestProperty("Cookie", cookieHeader);
        regCon.connect();
        //int rc = regCon.getResponseCode();

        //for (Entry<String, List<String>> header : regCon.getHeaderFields().entrySet()) {
        //    System.out.println(header.getKey() + "=" + header.getValue());
        //}

        BufferedReader br = new BufferedReader(new java.io.InputStreamReader(regCon.getInputStream()));
        String line = null; 
            String searchingfor="";
        while ((line = br.readLine()) != null){
                    // To Parse the results over here logics would be needed such as 
                    //if (line.indexOf("some_string")>-1) { 
                       // searhingfor=line.substring(line.indexOf("Pattern before),line.indexOf("endstring")+4)
                     //where 4 if number of characters end string was.
                    //}
                    //above is commented for now print each line 
            sba.append(line+"<br>");
        }

        }

        }else{
                sba.append("Authentication has failed - credintials did not meet the criteria for username:"+ username+" on url: "+url+ "?" + query);
        }

    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    return(sba.toString());
}
}

这是用java编写的,与http https

一起使用的答案