1

我正在创建一个需要连接到基于 php 的站点并登录以收集相关数据的第 3 方 java 应用程序(桌面)。没有可访问的 Web 服务,没有 API,每个用户都将拥有自己的安全登录。该站点使用 dojo(如果这很重要),我正在使用 Java HttpClient 发送帖子。

HttpPost httppost = new HttpPost("https://thewebsite.net/index/login"); // .php ?
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();

//initialize the response string    
String nextpage = "";

try {
    // Add nvps
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
    nameValuePairs.add(new BasicNameValuePair("", ""));
    nameValuePairs.add(new BasicNameValuePair("login", "USER"));
    nameValuePairs.add(new BasicNameValuePair("", ""));
    nameValuePairs.add(new BasicNameValuePair("pass", "PASSWORD"));
    nameValuePairs.add(new BasicNameValuePair("Submit", ""));

    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

HttpResponse response = httpclient.execute(httppost);
userID = EntityUtils.toString(response.getEntity());

System.out.println(nextpage);
httppost.releaseConnection();
}
...

现在,我遇到的问题是给我的响应是用户的验证 jscript/通过 dojo 传递字段。

<script type='text/javascript'> 
dojo.require("dojox.validate._base"); 

function validate_RepeatPassword(val, constraints)
{
    var isValid = false; 

    if(constraints)  { 
        var otherInput =  dijit.byId(constraints[0]); 
        if(otherInput) { 
        var otherValue = otherInput.value; 
            isValid = (val == otherValue); 
        } 
    } 
    return isValid; 
}

</script>

我只是想连接,解析一个 html 响应,然后关闭连接。

当我使用 firebug 时,我把它作为 post 方法,但我似乎无法让它运行:Referer https://thewebsite.net/index/login Source login=USER&pass=PASSWORD

当我使用 HttpPost 客户端构建没有名称值对的直接发布 url 时:

HttpPost httppost = new HttpPost("https://thewebsite.net/index/login?login=USER&pass=PASSWORD"); 

,我收到一条错误响应,指出“用户和密码字段不能留空”。

我的问题是:是否有一种直接的登录方法比我缺少的更简单,可以让我成功地继续过去的登录?

谢谢 - 我喜欢 SO 社区;希望你能帮忙。

4

2 回答 2

0

我认为最好的库是jsoup

Connection.Response res = 
Jsoup.connect("https://thewebsite.net/index/login?login=USER&pass=PASSWORD")
.method(Method.POST)
.execute();

在此之后,您还需要进行验证。您需要读取 cookie、请求参数和标头参数,这将起作用。

于 2013-03-15T20:55:46.147 回答
0

我最终没有使用您的确切代码(使用 post 参数),但 JSoup 是解决方法。

这是我用的:

`res = Jsoup.connect("https://thewebsite.net/index/login")
    .data("login", User).data("pass", Pass)
    .userAgent("Chrome").method(Method.POST).execute();

//then I grabbed the cookie and sent the next post for the data

Document t = res.parse(); //for later use
SessionID = res.cookie("UNIQUE_NAME");

//the JSON
Connection.Response driverx =     Jsoup.connect("https://thewebsite.net/datarequest/data").cookie("UNIQUE_NAME",SessionID).userAgent("Chrome").method(Method.POST).execute();`
于 2013-03-20T03:13:22.747 回答