2012-10-06 31 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」標題。