java - 什么时候用 Java 在 HttpURLConnection 中设置 cookie?

标签 java cookies httpurlconnection

看看这些代码:

public static String get(String url, Properties parameters) throws MalformedURLException, IOException{
        url = buldGetUrl(url, parameters);
        if(DEBUG) System.out.println("[HTTP GET REQUEST]");
        if(DEBUG) System.out.println(" URL: " + url);
        HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
        conn.setRequestProperty("Cookie","JSESSIONID=" + J_SESSION_ID);
        conn.connect();

        if(DEBUG) System.out.println("\n[HTTP GET RESPONSE]");
        if(DEBUG) System.out.println("==== Response Headers =====");
        String serverCookies = conn.getHeaderField("Set-Cookie");
        if(serverCookies != null){
            String[] cookies = serverCookies.split(";");
            for(String s : cookies){
                s = s.trim();
                if(s.split("=")[0].equals("JSESSIONID")){
                    J_SESSION_ID = s.split("=")[1];
                    if(DEBUG) System.out.println(" Session ID Found: " + J_SESSION_ID);
                    break;
                }
            }
        }
        if(DEBUG){
            for(String s : conn.getHeaderFields().keySet()){
                if(s == null)
                    System.out.println(" " + conn.getHeaderField(s));
                else
                    System.out.println(" " + s + "=" + conn.getHeaderField(s));
            }
        }

        if(DEBUG) System.out.println("==== Response Content =====");
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String str = null;
        StringBuilder sb = new StringBuilder();
        while ((str = br.readLine()) != null) {
            sb.append(str + System.getProperty("line.separator"));
            if(DEBUG) System.out.println(str);

        }
        br.close();
        return sb.toString();
    }

请注意这三行:

HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();    
conn.setRequestProperty("Cookie","JSESSIONID=" + J_SESSION_ID);
conn.connect();

URL#openConnectionURL#connect,哪个方法向服务器发送请求? 如果答案是openConnection 方法,如何在已发送请求后设置cookie?如果答案是connect 方法,您猜怎么着?下面这些代码也有效,我可以从服务器得到响应:

url = buldGetUrl(url, parameters);
        if(DEBUG) System.out.println("[HTTP GET REQUEST]");
        if(DEBUG) System.out.println(" URL: " + url);
        HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();

        if(DEBUG) System.out.println("\n[HTTP GET RESPONSE]");
        if(DEBUG) System.out.println("==== Response Headers =====");
        String serverCookies = conn.getHeaderField("Set-Cookie");
        if(serverCookies != null){
            String[] cookies = serverCookies.split(";");
            for(String s : cookies){
                s = s.trim();
                if(s.split("=")[0].equals("JSESSIONID")){
                    J_SESSION_ID = s.split("=")[1];
                    if(DEBUG) System.out.println(" Session ID Found: " + J_SESSION_ID);
                    break;
                }
            }
        }
        if(DEBUG){
            for(String s : conn.getHeaderFields().keySet()){
                if(s == null)
                    System.out.println(" " + conn.getHeaderField(s));
                else
                    System.out.println(" " + s + "=" + conn.getHeaderField(s));
            }
        }

        if(DEBUG) System.out.println("==== Response Content =====");
        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String str = null;
        StringBuilder sb = new StringBuilder();
        while ((str = br.readLine()) != null) {
            sb.append(str + System.getProperty("line.separator"));
            if(DEBUG) System.out.println(str);

        }
        br.close();
        return sb.toString();

最佳答案

方法 connect() 将打开到此 URL 引用的资源的通信链接,如果这样的连接尚未建立的话。 getInputStream()、getResponseCode() 或 getResponseMessage() 方法将创建与服务器的通信链接

关于java - 什么时候用 Java 在 HttpURLConnection 中设置 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8239453/

相关文章:

java - ArrayList 对象内存消耗高

javascript - 使用cookieStore : Cannot read property "put" of undefined

php - 在 php 中创建了一个 cookie,现在尝试在 javascript 中更新它?

java - 如何在java中处理阿拉伯语

java - 对话框 fragment 无法转换为 android.app.activity

java - 使用 Java 阅读 MS Word 2007

java - 具有复杂属性的 Logback 自定义布局

javascript - 在文档准备好之前创建 cookie 安全吗?

Android:HttpsUrlConnection with Authenticator for Basic Authentication 在密码错误时永远迭代(在 401 响应中)

java - 验证 CXF HttpAsyncClient 对 use.async.http.conduit 上下文属性的使用