0

サーバーからすべての Cookie を読み取りたいのですが、次のエラーが表示されます。

java.lang.IllegalStateException: Connection already established

接続する前に Cookie を読み取るにはどうすればよいですか? 接続を定義する前に Cookie 読み取りコードを配置しようとしましたが、接続を確立する接続を定義するまで機能しません。これにより、Cookie の読み取りが妨げられます...何か助けてください。

これが私のコードです:

package com.example.read;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

List<String> cookies = null;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btn = (Button)findViewById(R.id.button1);
    btn.setOnClickListener(l);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

View.OnClickListener l = new View.OnClickListener() {

    public void onClick(View v) {
        EditText edt = (EditText)findViewById(R.id.editText1);
        if(!edt.getText().toString().equals("")){
            readData(edt.getText().toString());
        }
    }
};

void readData(String text){
    URL url;
    HttpURLConnection conn;
    DataOutputStream out;
    DataInputStream in;

    try{
        url = new URL("http://"+text);
        conn = (HttpURLConnection)url.openConnection();
         if(cookies==null){
               conn.getHeaderField("Set-Cookie");
            }
            if(cookies!=null){
                for(String cookie : cookies){
                    conn.setRequestProperty("Cookie", cookie);
                }
            }
        conn.setDoOutput(true);
        String post = "mobile_app="+URLEncoder.encode("1","UTF-8");
        out = new DataOutputStream(conn.getOutputStream());
        out.writeBytes(post);
        out.flush();
        out.close();
        in = new DataInputStream(conn.getInputStream());
        String line = "";
        String data = "";
        while((line=in.readLine())!=null){
            data+=line;
        }
        TextView tv = (TextView)findViewById(R.id.textView1);
        tv.setText(data);
    } catch(Exception e){
        System.out.println(e);
        TextView tv = (TextView)findViewById(R.id.textView1);
        tv.setText(e.toString());
    }
}

}
4

1 に答える 1

0

あなたの質問は少し奇妙に聞こえます。クライアントとして、接続を確立する前に Cookie を設定します (わかっている場合)。サーバーが返す Set-Cookie ヘッダーは、サーバーの応答が返されるとすぐに読み取ることができます。もちろん、クライアントCookieを設定するには遅すぎます:-)

つまり、リクエストを送信する前にサーバーから Cookie を読み取ることはできません。

サーバーは " Set-Cookie" ヘッダーを送信し、その後、クライアントは後続のすべてのリクエストでこれらの Cookie を送信します。Cookieそのため、" " ヘッダーは 2 番目以降のリクエストからのみ設定できます。

于 2012-10-06T21:59:47.920 に答える