How to use Cookies in HttpURLConnection for ANDROID?

匿名 (未验证) 提交于 2019-12-03 10:10:24

问题:

I am trying to create an Application for Asterisk Interface, the configuration setup has been done properly as I have double checked it.

It seems the reason why I can't access Config files from Asterisk server has to do with the connection. I need to use a cookie for connecting to the same instance of the login session.

But so far I am unable to use Cookie Properly need a little help.

I am supposed to login by pressing button1 (bt1) and get config file by pressing button2 (btn2).

public class AsteriskInterface extends Activity {      private static final String TAG = " AsteriskInterface";      EditText ed1;     Button bt1,bt2;     static String url ="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";     static String logincmd ="http://192.168.8.2:8088/asterisk/rawman?action=login&username=admin&secret=admin123";     static String getfilecmd = "http://192.168.8.2:8088/asterisk/rawman?action=getconfig&filename=sip.conf";      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);          ed1 = (EditText) this.findViewById(R.id.editText);         bt1 = (Button) this.findViewById(R.id.submit);         bt2 = (Button) this.findViewById(R.id.config);         final WebView myWebView = (WebView) findViewById(R.id.webView);          bt1.setOnClickListener(new OnClickListener() {             public void onClick(View view) {                 try{                     new Execute().execute(logincmd);                 } catch(Exception e) {                     Log.v("Exception execute", "Exception:"+e.getMessage());                 }                        }         });          bt2.setOnClickListener(new OnClickListener() {             public void onClick(View view) {                     try{                     new Execute().execute(getfilecmd);                 } catch(Exception e) {                     Log.v("Exception execute", "Exception:"+e.getMessage());                 }                 //myWebView.loadUrl(cmd2);             }         });     }      public static void Response(String result) {         Log.e(TAG,result);       } }  class Execute extends AsyncTask<String, Integer, String> {      List<String> cookies = null;      protected String doInBackground(String... searchKey) {          String cmd = searchKey[0];         try {             return  action2(cmd);         } catch(Exception e) {             Log.v("Exception execute do back ground", "Exception:"+e.getMessage());             return "";         }     }      protected void onPostExecute(String result) {         try {             AsteriskInterface.Response(result);         } catch(Exception e) {             Log.v("Exception excecute onPost Execute",                     "Exception:"+e.getMessage());         }     }      private String action2(String uRL) throws MalformedURLException, IOException {          StringBuilder response = new StringBuilder();         Log.v("Execute","execute url:"+uRL);         URL url = new URL(uRL);         HttpURLConnection httpconn  = (HttpURLConnection) url.openConnection();          DataOutputStream out;         DataInputStream in;          if(cookies==null){             httpconn.getHeaderField("Set-Cookie");         }         if(cookies!=null){             for(String cookie : cookies){                 httpconn.setRequestProperty("Cookie", cookie);             }         }         httpconn.setDoOutput(true);         String post = "mobile_app="+URLEncoder.encode("1","UTF-8");         out = new DataOutputStream(httpconn.getOutputStream());         out.writeBytes(post);         out.flush();         out.close();         in = new DataInputStream(httpconn.getInputStream());         String line = "";         String data = "";         while((line=in.readLine())!=null){             data+=line;         }          if(httpconn.getResponseCode()==HttpURLConnection.HTTP_OK) {             BufferedReader input = new BufferedReader(                     new InputStreamReader(httpconn.getInputStream()),                     8192);             String strLine = null;             while ((strLine = input.readLine()) != null) {                 response.append(strLine);             }             input.close();         }         return response.toString();     } } 

I can make out that I am getting connected to previous login session. But now how to issue a new command?

03-28 10:02:15.861: V/Execute(4261): execute url:http://192.168.8.x:8088/asterisk/rawman?action=login&username=admin&secret=admin123 03-28 10:02:18.871: V/Exception execute do back ground(4261): Exception:Already connected 03-28 10:02:23.651: V/Execute(4261): execute url:http://192.168.8.x:8088/asterisk/rawman?action=getconfig&filename=sip.conf 03-28 10:02:26.691: V/Exception execute do back ground(4261): Exception:Already connected 03-28 10:02:26.721: D/dalvikvm(4261): GC_CONCURRENT freed 226K, 8% free 7430K/8007K, paused 24ms+3ms, total 61ms

回答1:

private String action(String uRL) throws MalformedURLException, IOException {

    StringBuilder response = new StringBuilder();     Log.v("Execute","execute url:"+uRL);     URL url = new URL(uRL);     HttpURLConnection httpconn  = (HttpURLConnection) url.openConnection();      if(sCookie!=null && sCookie.length()>0){         httpconn.setRequestProperty("Cookie", sCookie);     }      if(httpconn.getResponseCode()==HttpURLConnection.HTTP_OK) {         BufferedReader input = new BufferedReader(                 new InputStreamReader(httpconn.getInputStream()),                 8192);         String strLine = null;         while ((strLine = input.readLine()) != null) {             response.append(strLine);         }         input.close();     }      String cookie = httpconn.getHeaderField("set-cookie");     if(cookie!=null && cookie.length()>0){         sCookie = cookie;     }     return response.toString();  } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!