2

Android Webサーバーで作業しています。エミュレーターブラウザでlocalhost:8080にアクセスすると、パスワードフィールドを含むページ/フォームが表示されます。パスワードの検証が成功したら、ユーザーを成功/失敗ページにリダイレクトしたいと思います。着信http postリクエストを読み取り、検証のためにパスワードフィールドを解析するための最良の方法は何ですか?正しい方向へのポインターは次のようになります。大変感謝しております。フォームが送信されるURLのハンドラーがあります。ハンドラーのコードは次のとおりです。

import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.entity.ContentProducer;
import org.apache.http.entity.EntityTemplate;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpRequestHandler;

import android.content.Context;

public class LoginHandler implements HttpRequestHandler {
private Context context = null;
public LoginHandler(Context context) {
    this.context = context;
}

@Override
public void handle(final HttpRequest request, HttpResponse response,
        HttpContext httpcontext) throws HttpException, IOException {
       HttpEntity entity = new EntityTemplate(new ContentProducer() {
        public void writeTo(final OutputStream outstream) throws IOException {
            String resp = null;
            OutputStreamWriter writer = new OutputStreamWriter(outstream, "UTF-8");
            if(validatePassword()==true){
             resp ="<html><head></head><body><h1>Home<h1><p>Success.</p></body></html>";
            }
            else{resp="<html><head></head><body><h1>Home<h1><p>Login Failed.</p></body></html>";}
            writer.write(resp);
            writer.flush();
        }


    });
    response.setHeader("Content-Type", "text/html");
    response.setEntity(entity);

}
boolean validatePassword(){
boolean pass=false;
//parse request body here and check for the password if true return true/else false
 return pass;
 }


 }
4

2 に答える 2

5

何年も探し回った後、私は解決策を見つけました。handleメソッドに以下を追加するとうまくいきます。元のポスターに感謝します。http://www.androiddevblog.net/android/a-bare-minimum-web-server-for-android-platform

        if (request instanceof HttpEntityEnclosingRequest) {
HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
if (entity != null) {
Log.v("RequestBody", EntityUtils.toString(entity, "UTF-8"));
entity.consumeContent();
}
}
于 2012-08-15T18:40:33.473 に答える
2

これがあなたの求めているものではない場合はお詫び申し上げます。そうでない場合はお知らせください。

JSONObjectを使用して、そのパスワードが正しいことが確認されたかどうかを返すことができます。

たとえば、パスワードが正しい場合、HTTPの結果を次のように保存できます。

{"status":200,"confirmed":"true"} 

それ以外の場合は「false」。

HTTP Post Requestから戻ってきたら、この結果を文字列として保存し、それから作成するJSONObjectことができます。例えば:

// Send the URL to a postRequest function and return the result as a String
String output = makePostRequest(url);

// Parse the String as a JSONObject and receive whether or not the login was confirmed
JSONObject o = new JSONObject(output);
String confirmed = o.getString("confirmed");
if (confirmed.equals("true")) {
    // Password confirmed - redirect user to success page
} else {
    // Password incorrect - redirect user to failure page
}

注: POSTリクエストから応答コードを受け取る方法についてのアイデアが必要な場合は、次のサンプルコードをご覧ください。

String output = {};

// Use bufferedreader and stringbuilder to build an output string (where conn is your HTTPUrlConnection object you used to make the post request    
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;

// Loop through response to build JSON String
while((line = br.readLine()) != null) {
    sb.append(line + "\n");
}

// Set output from response
output = sb.toString();

そして今output、あなたがJSONObjectに変えることができる文字列です。

これは役に立ちますか?


編集:
わかりました。取得する文字列はの形式になります{"password":"somepassword"}。これを解析するには、これを試してください。

String s = /* the string in the format {"password":"somepassword"} */
JSONObject o = new JSONObject(s);
String password = o.getString("password");
if (password.equals(random_password_at_beginning_of_webservice) {
    // Password confirmed - redirect user to success page
} else {
    // Password incorrect - redirect user to failure page
}
于 2012-08-08T12:04:52.453 に答える