2012-10-06 34 views
0

我想从服务器读取所有Cookie,但我得到了以下错误:读取cookies HttpURLConnection的Android的

java.lang.IllegalStateException: Connection already established 

我怎样才能连接之前阅读了饼干?我试图在定义连接之前放置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()); 
    } 
} 

} 

回答

0

你的问题听起来有点怪怪的。作为客户,您在建立连接之前设置Cookie - 如果您了解它们的话。服务器返回的Set-Cookie头只能在服务器的答案返回后才能被读取。那么当然是要设置任何客户端cookies :-)

换句话说:在发送请求之前,您根本无法从服务器读取cookie。

服务器发送“Set-Cookie”页眉和事后客户以下请求发送这些cookie每。因此,您只能从第二个请求开始设置您的“Cookie”标题。