1

関連データを収集するために、php ベースのサイトに接続してログインする必要があるサードパーティの 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 であり、道場を介してフィールドを渡すことです。

<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が修正されました。

これが私が使用したものです:

`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 に答える
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 に答える