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只能从第二个请求开始设置您的“”标头。

于 2012-10-06T21:59:47.920 回答