Java HttpClient:当我请求一个不同的网页时,即使在我已经成功登录之后,我仍然会返回登录页面

Java HttpClient:当我请求一个不同的网页时,即使在我已经成功登录之后,我仍然会返回登录页面,java,apache-commons-httpclient,Java,Apache Commons Httpclient,我的目标是: 登录后 获取同一会话中的图像(链接)并发布 到目前为止: 我通过HttpPost登录并保存cookie: 我得到的响应是登录页面: GET/foo/images/B0DF3A14706A-008-0008/7.jpg HTTP/1.1 主持人:192.168.1.100:8080 连接:保持活力 用户代理:Apache HttpClient/4.4.1(Java/1.8.0_25) Cookie:JSESSIONID=97D93F7C7E11F22A6E895554

我的目标是:

  • 登录后
  • 获取同一会话中的图像(链接)并发布
到目前为止:

  • 我通过HttpPost登录并保存cookie:

  • 我得到的响应是登录页面:

GET/foo/images/B0DF3A14706A-008-0008/7.jpg HTTP/1.1
主持人:192.168.1.100:8080
连接:保持活力
用户代理:Apache HttpClient/4.4.1(Java/1.8.0_25)
Cookie:JSESSIONID=97D93F7C7E11F22A6E895554E761D3AE
接受编码:gzip,deflate
HTTP/1.1200ok
服务器:ApacheCoote/1.1
缓存控制:专用
截止日期:1969年12月31日星期三美国东部时间19:00:00
设置Cookie:JSESSIONID=D94C9147870EE8A7DEEDB67AD77B695E;路径=/foo/;HttpOnly
内容类型:text/html;字符集=ISO-8859-1
传输编码:分块
日期:2015年6月3日星期三18:28:02 GMT
2000
囤积者登录
html,正文{
.保证金:0;
.填充:0;
.溢出:隐藏;
}
......
为什么我会得到这个?我甚至可以看到,我发送的请求与登录的会话相同。有人有过这个问题吗?有人想出解决办法了吗


谢谢。

我也有过类似的经历。该cookie可能被HttpClient拒绝。我用这个密码解决了这个问题:

        ...

        CookieSpecProvider easySpecProvider = new CookieSpecProvider() {

            public CookieSpec create(HttpContext context) {

                return new BrowserCompatSpec() {
                    @Override
                    public void validate(Cookie cookie, CookieOrigin origin)
                            throws MalformedCookieException {
                        // Oh, I am easy
                    }
                };
            }

        };

        registry = RegistryBuilder.<CookieSpecProvider>create()
                .register("easy", easySpecProvider)
                .build();

        closableClient = httpclient.setDefaultCookieSpecRegistry(registry).setDefaultRequestConfig(httpRequestBase.getConfig()).build();

        response = closableClient.execute(httpRequestBase, context);

        ...
。。。
CookieSpecProvider easySpecProvider=新CookieSpecProvider(){
公共CookieSpec创建(HttpContext上下文){
返回新的BrowserCompatSpec(){
@凌驾
公共无效验证(Cookie Cookie、CookieOrigin)
抛出格式不正确的OokieException{
//哦,我很容易
}
};
}
};
registry=RegistryBuilder.create()
.注册(“轻松”,easySpecProvider)
.build();
closableClient=httpclient.setDefaultCookieSpecRegistry(注册表).setDefaultRequestConfig(httpRequestBase.getConfig()).build();
response=closableClient.execute(httpRequestBase,context);
...

我也有类似的经历。该cookie可能被HttpClient拒绝。我用这个密码解决了这个问题:

        ...

        CookieSpecProvider easySpecProvider = new CookieSpecProvider() {

            public CookieSpec create(HttpContext context) {

                return new BrowserCompatSpec() {
                    @Override
                    public void validate(Cookie cookie, CookieOrigin origin)
                            throws MalformedCookieException {
                        // Oh, I am easy
                    }
                };
            }

        };

        registry = RegistryBuilder.<CookieSpecProvider>create()
                .register("easy", easySpecProvider)
                .build();

        closableClient = httpclient.setDefaultCookieSpecRegistry(registry).setDefaultRequestConfig(httpRequestBase.getConfig()).build();

        response = closableClient.execute(httpRequestBase, context);

        ...
。。。
CookieSpecProvider easySpecProvider=新CookieSpecProvider(){
公共CookieSpec创建(HttpContext上下文){
返回新的BrowserCompatSpec(){
@凌驾
公共无效验证(Cookie Cookie、CookieOrigin)
抛出格式不正确的OokieException{
//哦,我很容易
}
};
}
};
registry=RegistryBuilder.create()
.注册(“轻松”,easySpecProvider)
.build();
closableClient=httpclient.setDefaultCookieSpecRegistry(注册表).setDefaultRequestConfig(httpRequestBase.getConfig()).build();
response=closableClient.execute(httpRequestBase,context);
...

谢谢您的回复@john!请原谅我的无知,但我有几个问题:我是否在POST请求(登录)中实现此方法,以便从响应中保存cookie?注册表、closableClient和httpRequestBase的类型是什么?谢谢你谢谢你的回复@john!请原谅我的无知,但我有几个问题:我是否在POST请求(登录)中实现此方法,以便从响应中保存cookie?注册表、closableClient和httpRequestBase的类型是什么?谢谢你谢谢你的回复@john!请原谅我的无知,但我有几个问题:我是否在POST请求(登录)中实现此方法,以便从响应中保存cookie?注册表、closableClient和httpRequestBase的类型是什么?非常感谢。
private InputStream sendGet(String url) {
    System.out.println("\nSending 'GET' request to URL : " + url);
    HttpGet httpGet = new HttpGet(url);

    HttpResponse response  = null;
    InputStream is = null;
    try 
    {

        //Setting up cookie store
        CookieStore cookiestr = new BasicCookieStore(); 
        BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", sessionId);
        cookie.setDomain("192.168.1.100");
        cookie.setPath("/foo/");
        cookie.setAttribute(ClientCookie.PATH_ATTR, "/foo/");
        cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "192.168.1.100");


        CookieStore cookiestr = httpContext.getCookieStore();
        cookiestr.addCookie(cookie);
        httpContext.setCookieStore(cookiestr);

    CloseableHttpClient httpclient =  HttpClients.custom().setDefaultCookieStore(cookiestr).build();

        httpclient = HttpClients.createDefault();
        response = httpclient.execute(httpGet); 
        is = response.getEntity().getContent();

        System.out.println("Response Code : " + response.getStatusLine());
        EntityUtils.consume(response.getEntity());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return is;
}
GET /foo/images/B0DF3A14706A-008-0008/7.jpg HTTP/1.1
Host: 192.168.1.100:8080
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.4.1 (Java/1.8.0_25)
Cookie: JSESSIONID=97D93F7C7E11F22A6E895554E761D3AE
Accept-Encoding: gzip,deflate

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Cache-Control: private
Expires: Wed, 31 Dec 1969 19:00:00 EST
Set-Cookie: JSESSIONID=D94C9147870EE8A7DEEDB67AD77B695E; Path=/foo/;     HttpOnly
Content-Type: text/html;charset=ISO-8859-1
Transfer-Encoding: chunked
Date: Wed, 03 Jun 2015 18:28:02 GMT

2000

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
<title>Hoarder Login</title>
<link rel="icon" href="resource/favicon.ico"></link>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
<style type='text/css'>
html, body {
 .margin: 0;
 .padding: 0;
 .overflow: hidden;
}
......
        ...

        CookieSpecProvider easySpecProvider = new CookieSpecProvider() {

            public CookieSpec create(HttpContext context) {

                return new BrowserCompatSpec() {
                    @Override
                    public void validate(Cookie cookie, CookieOrigin origin)
                            throws MalformedCookieException {
                        // Oh, I am easy
                    }
                };
            }

        };

        registry = RegistryBuilder.<CookieSpecProvider>create()
                .register("easy", easySpecProvider)
                .build();

        closableClient = httpclient.setDefaultCookieSpecRegistry(registry).setDefaultRequestConfig(httpRequestBase.getConfig()).build();

        response = closableClient.execute(httpRequestBase, context);

        ...