当前位置: 首页 > 知识库问答 >
问题:

如何在Android的HttpURLConnection中使用cookie?

呼延永新
2023-03-14

我试图为星号接口创建一个应用程序,配置设置已经做了正确的,因为我已经检查过了。

我不能从Asterisk服务器访问配置文件的原因似乎与连接有关。我需要使用cookie连接到登录会话的同一个实例

但到目前为止,我还不能正确使用Cookie,需要一点帮助。

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();
    }
}

共有1个答案

蓝华皓
2023-03-14
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();

    }
 类似资料:
  • 我的问题是关于应该在Android中使用HttpURLConnection编写的代码来获得响应? 请求和2个答复如下:

  • 我正试图用android应用程序向我的web服务器发送一个Json对象。我发现的每个示例都使用了被android 6删除的HttpClient。有人能给我举一个HttpURLConnection方法的例子吗。

  • 我试图使用HttpURLConnection执行post请求,但不知道如何正确执行。 我可以使用以下代码成功地使用Android AsyncHttp客户端执行请求: 可以在台式机上使用curl执行相同的请求: 这两种方法都给了我来自服务器的预期响应。 现在我想使用HttpURLConntions执行相同的请求。问题是我不知道如何正确地执行它。我尝试过这样的事情: 如何正确地将与使用AsyncHtt

  • 我使用自定义授权标头对http请求进行签名: 所以这个异常不同于最初的异常。当我移除头部并禁用webservice上的授权时,连接将按预期工作。所以问题似乎出在自定义授权标头上。有什么想法吗?

  • 问题内容: 我已经开始使用推荐的广告,并从移走了。我无法重新粘合在一起的一件事是使用持久性Cookie存储。我想简单地将自定义cookie处理程序/管理器附加到我的连接中以存储cookie。Android文档并不是很有帮助,因为它将Cookie主题分为两行。 我以前使用过LoopJ ,效果很好。 关于如何在Android中设置可以附加到我的自动保存和检索cookie 的持久性cookie存储的想法

  • 我已经开始使用推荐的,并不再使用。其中一件我无法粘合的事情是使用持久的cookie存储。我只想在我的连接上附加一个定制的cookie处理程序/管理器来存储cookie。Android文档并没有太大帮助,因为它将有关cookie的主题概括为两行。 我之前一直在使用LoopJ的PersistentCookieStore,效果很好。 关于如何在Android中设置一个持久的cookie存储,我可以附加到