Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用HttpURLConnection的Java客户端出现Cookie问题+;Node.js/expresswebserver_Java_Node.js_Cookies_Express - Fatal编程技术网

使用HttpURLConnection的Java客户端出现Cookie问题+;Node.js/expresswebserver

使用HttpURLConnection的Java客户端出现Cookie问题+;Node.js/expresswebserver,java,node.js,cookies,express,Java,Node.js,Cookies,Express,我有一个Java客户端试图连接到一个使用cookies提供内容的Express.js Web服务器。express服务器在浏览器上运行良好(它接收会话cookie),但在我的Java客户端上运行不好。Java客户端显示响应头上的Set Cookie字段为null 几乎可以肯定这是一个Java问题。我已经检查了网络流量(使用wireshark),它显示Express.js Web服务器正在按预期提供cookie 我有以下Java代码: package mine; import java.net.C

我有一个Java客户端试图连接到一个使用cookies提供内容的Express.js Web服务器。express服务器在浏览器上运行良好(它接收会话cookie),但在我的Java客户端上运行不好。Java客户端显示响应头上的
Set Cookie
字段为
null

几乎可以肯定这是一个Java问题。我已经检查了网络流量(使用wireshark),它显示Express.js Web服务器正在按预期提供cookie

我有以下Java代码:

package mine;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpsClient {

    public static void main(String[] args) throws Exception {

        CookieHandler.setDefault(new CookieManager());

        URL obj = new URL("http://localhost:8888");
        HttpURLConnection conn = (HttpURLConnection) obj.openConnection();

        String headerName=null;
        for (int i=1; (headerName = conn.getHeaderFieldKey(i)) != null; i++) {
            System.out.println(headerName + ": " + conn.getHeaderField(i));
        }        
    }
}
上述代码的输出:

X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 4535
ETag: "309029400"
Set-Cookie: null
Date: Wed, 28 Aug 2013 04:40:25 GMT
Connection: keep-alive
下面是express.js/node.js代码:

var express     = require('express');
var app         = express();
var mongoStore  = require('connect-mongo')(express);

app.configure(function(){

    app.use(express.logger());
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.errorHandler());

    app.use(express.session({
        store: new mongoStore({
            url: 'mongodb://localhost:27017/sessions'
        }),
        secret: 'asdasdfasdfasdfasdfa',
        maxAge  : new Date(Date.now() + 24*3600*1000 * 365),
        expires : new Date(Date.now() + 24*3600*1000 * 365)
    }));
    app.use(express.methodOverride());

});

app.get('/', function(req, res) {
    res.send('ok', 200);
});


var http        = require('http');
http.createServer(app).listen(8888, function(){
    console.log('Express server listening on port ' + 8888);
});

我是不是遗漏了什么?Java处理会话cookie的方式不同吗?

您考虑过使用Apache HttpClient吗?过去我可以把它和饼干一起使用@Catchwa,非常感谢!!这符合你的建议。我花了一整天的时间想弄明白这一点。我仍然想知道为什么上面的方法不起作用。