Httpclient 4,错误302。如何重定向?

2023-11-30

我想访问一个首先需要(tomcat 服务器)身份验证的站点,然后使用 POST 请求登录并让该用户查看该站点的页面。我使用Httpclient 4.0.1

第一次身份验证工作正常,但登录时总是抱怨此错误:“302 暂时移动”

我保留了cookies并且保留了上下文,但什么也没有。实际上,登录似乎有效,因为如果我输入不正确的参数或用户||密码,我会看到登录页面。所以我想不起作用的是自动重定向。

按照我的代码,它总是抛出 IOException, 302:

    DefaultHttpClient httpclient = new DefaultHttpClient();
    CookieStore cookieStore = new BasicCookieStore();
    httpclient.getParams().setParameter(
      ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY); 
    HttpContext context = new BasicHttpContext();
    context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
    //ResponseHandler<String> responseHandler = new BasicResponseHandler();

    Credentials testsystemCreds = new UsernamePasswordCredentials(TESTSYSTEM_USER,  TESTSYSTEM_PASS);
    httpclient.getCredentialsProvider().setCredentials(
            new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
            testsystemCreds);

    HttpPost postRequest = new HttpPost(cms + "/login");
    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    formparams.add(new BasicNameValuePair("pUserId", user));
    formparams.add(new BasicNameValuePair("pPassword", pass));
    postRequest.setEntity(new UrlEncodedFormEntity(formparams, "UTF-8"));
    HttpResponse response = httpclient.execute(postRequest, context);
    System.out.println(response);

    if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK)
        throw new IOException(response.getStatusLine().toString());

    HttpUriRequest currentReq = (HttpUriRequest) context.getAttribute( 
            ExecutionContext.HTTP_REQUEST);
    HttpHost currentHost = (HttpHost)  context.getAttribute( 
            ExecutionContext.HTTP_TARGET_HOST);
    String currentUrl = currentHost.toURI() + currentReq.getURI();        
    System.out.println(currentUrl);

    HttpEntity entity = response.getEntity();
    if (entity != null) {
        long len = entity.getContentLength();
        if (len != -1 && len < 2048) {
            System.out.println(EntityUtils.toString(entity));
        } else {
            // Stream content out
        }
    }

对于 4.1 版本:

DefaultHttpClient  httpclient = new DefaultHttpClient();
    httpclient.setRedirectStrategy(new DefaultRedirectStrategy() {                
        public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context)  {
            boolean isRedirect=false;
            try {
                isRedirect = super.isRedirected(request, response, context);
            } catch (ProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if (!isRedirect) {
                int responseCode = response.getStatusLine().getStatusCode();
                if (responseCode == 301 || responseCode == 302) {
                    return true;
                }
            }
            return isRedirect;
        }
    });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Httpclient 4,错误302。如何重定向? 的相关文章

随机推荐

  • 带有运行时参数的 dlsym/dlopen

    我正在尝试做类似以下的事情 enum types None Bool Short Char Integer Double Long Ptr int main int argc char args enum types params 10 0
  • 禁用iPhone“保存图像”弹出窗口[重复]

    这个问题在这里已经有答案了 我正在尝试禁用 保存图像 对话框在 iPhone 任何 iOS 设备上显示 当用户在 Safari 中时 他们可以将手指放在图像上 然后将该图像直接保存到手机中 他们有办法用 javascript jquery
  • 如何在 Zend Framework 2 中使用 cookie? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我不明白如何在 ZF2 中使用 cookie 有人可以建议一些带有 set 和 get
  • 如何在 SwiftUI 中的 firebase 查询期间显示加载动画

    我正在使用 SwiftUI 构建一个应用程序 并有一个 ObservableObject 用于查询我的 Firestore 数据库 我的文档相对较大 并且经常需要查询很多文档 因此我想在查询下载数据时加入某种加载指示器 这是我创建的 Obs
  • 使用 Python 从直接 URL 下载视频

    我想用python下载视频 我尝试使用 youtube dl 但我希望从中下载视频的网站不受支持 如何使用 Python 下载视频 首先 我尝试在点击此链接后从 keepvid com 获取我想要下载的视频的直接链接http www kmc
  • Flex 侧边栏:如何增长到 100% 的高度

    我正在使用 CSS flex 构建一个侧边栏 我需要它垂直增长以填充整个屏幕的垂直高度 这是我正在做的事情的框架 JSF 在这里 app display flex flex direction row align items flex st
  • 应用窗口函数计算 pySpark 中的差异

    我在用pySpark 并设置了我的数据框 其中两列代表每日资产价格 如下所示 ind sc parallelize range 1 5 prices sc parallelize 33 3 31 1 51 2 21 3 data ind z
  • 如何使用Retrofit进行同步调用

    我正在尝试使用 Retrofit call enqueue DrawCircles 获取数据 当我调试值时 但我认为它不会等待 我的函数将继续执行其余的代码行 所以当我运行它时 问题是结果列表 myListCoord 始终为空 如何进行同步
  • 如何在服务器响应上写入文件对象而不在服务器上保存文件?

    我正在将 Spring 与 DWR 一起使用 我想返回一个文件对象作为响应 但是我将文件 要发送 保存在服务器临时位置 然后将其位置作为锚标记的 href 发送到客户端 但是我想知道是否有一种方法可以抛出将文件直接发送到响应对象上的浏览器
  • 地图标记不显示(JavaScript/Google 地图 API V3)

    我在使用 Google Maps API v3 显示地图标记时遇到问题 我试图将它们全部保存在一个数组中 以使显示大量内容相对简单 目前 地图加载正常 但抛出错误Uncaught TypeError Object has no method
  • 带问号和与号的 mod_rewrite(使用 PHP)

    我有一个基于 PHP 的 Web 应用程序 我正在尝试应用 Apache 的 mod rewrite 原始 URL 的形式为 我想将它们转换为 http example com home x 5 请注意 在重写页面名称时 我还有效地 移动
  • WebApi 授权过滤器,在 json 负载中带有令牌

    我一直在研究 AspNetWebApi 的授权 但关于该主题的信息有点稀疏 我有以下选择 在查询字符串上传递 API 令牌 将 API 令牌作为标头传递 使用基本身份验证传递 API 令牌 将 API 令牌传递到 json 中的请求负载上
  • Python Json 解析器[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有一个具有以下结构的 JSON 文件 contributors null truncated false text HomeShop18 DreamJob to professio
  • 将 Vue npm 模块导入我的 javascript 文件

    使用 NPM 将 VueJs 导入我的 javascript 文件的正确方法是什么 我收到 Vue 未定义错误 First 安装包 npm install vue 然后将其导入到您想要使用 Vue 的任何文件中 import Vue fro
  • 如何在没有会话的情况下使用 Spring Security?

    我正在使用 Spring Security 构建一个 Web 应用程序 该应用程序将运行在 Amazon EC2 上并使用 Amazon 的弹性负载均衡器 不幸的是 ELB 不支持粘性会话 因此我需要确保我的应用程序在没有会话的情况下正常工
  • AccessibilityService 在重新启动时停止接收事件

    我有一个使用辅助功能服务来收听通知的应用程序 在用户重新启动之前它可以正常工作 如果重新启动 您必须从辅助服务菜单中禁用 重新启用该服务 为什么应用程序重启后无法获取事件 Override protected void onServiceC
  • Android 市场应用程序的最大大小?

    市场上的 Android 应用程序的大小有限制吗 我有一个有很多声音的应用程序 因此 apk 大小超过 10 Mb Thanks 根据this最近的 Android 开发者博客文章 50 MB是新的限制 但是 您应该尝试使应用程序的大小远低
  • 隐藏字段 $$viewid、$$xspsubmitid、$$xspexecid、$$xspsubmitvalue 和 $$xspsubmitscroll 的含义

    当我查看 XPage 的源代码时 我看到一些隐藏字段 viewid xspsubmitid xspexecid xspsubmitvalue and xspsubmitscroll 有一些文章像this and this这解释了 xspsu
  • python3中的惰性切片

    我在 python 中有一个巨大的列表 1 800 000 个项目 它是使用map 来自大约 1000 个 JSON 文件的函数 我想检查几个首要项目以确保脚本正常工作 我这样做是这样的 items map lambda file load
  • Httpclient 4,错误302。如何重定向?

    我想访问一个首先需要 tomcat 服务器 身份验证的站点 然后使用 POST 请求登录并让该用户查看该站点的页面 我使用Httpclient 4 0 1 第一次身份验证工作正常 但登录时总是抱怨此错误 302 暂时移动 我保留了cooki