防止 HttpClient 4 遵循重定向

2024-02-10

我正在使用 Apache HttpComponents 库连接到我的 AppEngine 应用程序。为了对我的用户进行身份验证,我需要将身份验证令牌传递到应用程序的登录地址(http://myapp.appspot.com/_ah/login?auth=.. http://myapp.appspot.com/_ah/login?auth=...) 并从响应的标头中获取 cookie。但是,登录页面响应一个重定向状态代码,并且我不知道如何阻止 HttpClient 遵循重定向,从而阻止我拦截 cookie。

Fwiw,我用来发送请求的实际方法如下。

private void execute(HttpClient client, HttpRequestBase method) {
    // Set up an error handler
    BasicHttpResponse errorResponse = new BasicHttpResponse(
            new ProtocolVersion("HTTP_ERROR", 1, 1), 500, "ERROR");

    try {
        // Call HttpClient execute
        client.execute(method, this.responseHandler);
    } catch (Exception e) {
        errorResponse.setReasonPhrase(e.getMessage());
        try {
            this.responseHandler.handleResponse(errorResponse);
        } catch (Exception ex) {
            // log and/or handle
        }
    }
}

我如何阻止客户端遵循重定向?

Thanks.

Update:

根据下面的解决方案,我在创建一个后执行了以下操作DefaultHttpClient client(并在将其传递给execute方法):

if (!this.followRedirect) {
    client.setRedirectHandler(new RedirectHandler() {
        public URI getLocationURI(HttpResponse response,
                HttpContext context) throws ProtocolException {
            return null;
        }

        public boolean isRedirectRequested(HttpResponse response,
                HttpContext context) {
            return false;
        }
    });
}

比看起来需要的更冗长,但并不像我想象的那么困难。


您可以使用 http 参数来做到这一点:

final HttpParams params = new BasicHttpParams();
HttpClientParams.setRedirecting(params, false);

该方法没有 javadoc,但如果您查看源代码,您可以看到它设置:

句柄重定向 http://hc.apache.org/httpcomponents-client/httpclient/apidocs/org/apache/http/client/params/ClientPNames.html#HANDLE_REDIRECTS

它控制:

定义是否应自动处理重定向

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 HttpClient 4 遵循重定向 的相关文章

随机推荐

  • 根据 CSV 中的值创建文件夹

    我正在开发一个更大的脚本解决方案的一小部分 其中我需要根据 CSV 中存储的值创建文件夹 然后根据 csv 列中的值将适用的文件移动到新文件夹中 CSV 的格式 fileName folder AC002 Y AC034 Y AC001 X
  • 在文档中添加新元素后,jQuery 显示不起作用

    我正在使用 Ajax Request 将元素加载到 div 容器中 默认情况下我隐藏一个输入框 如果用户单击该 div 上的编辑图标 我想显示输入框 这是我的代码 HTML代码 div class container div
  • 如何将mysql结果集分布在4个数组的多维数组中

    我对这个简直要疯了 花了近 4 个小时试图弄清楚 但没有成功 我正在尝试获取 4 个数组的多维数组中的 mysql 查询结果集 因此 如果结果集返回 8 条记录 则该数组将包含 4 个每组 2 条记录的数组 如果结果集返回 20 条记录 则
  • Chrome/Webkit 音频标签错误?

    我正在尝试让 HTML5 的音频标签在 Chrome 中工作 以下代码在 Firefox 中可以完美运行 您知道为什么它在 Webkit 中无法运行吗 我还应该指出 我也用 mp3 尝试过此操作 无论什么格式 每当对音频调用 play 时
  • 快速创建 BouncyCastle SecureRandom 实例是否有问题?

    如所述随机数生成器仅生成一个随机数 https stackoverflow com q 767999 1709587 创建一个新实例通常是不正确的System Random每次你需要另一个随机数时 因为System Random是根据时钟播
  • VSCODE 精确的按键绑定,想知道当前的上下文。怎么做?

    许多插件可以通过未记录的 API 设置自己的特定 上下文 设置上下文 由于文档没有列出这些自定义上下文 因此我不能只查看文档来了解如何以正确的方式配置我自己的键绑定 是否有可能知道当前环境 array 例如 我想使用键盘快捷键 没有鼠标 导
  • 我需要一个 Python 类来跟踪它被实例化的次数

    我需要一个像这样工作的类 gt gt gt a Foo gt gt gt b Foo gt gt gt c Foo gt gt gt c i 3 这是我的尝试 class Foo object i 0 def init self Foo i
  • Visual Basic 2010 HTTP POST 请求

    如何将 POST HTTP 请求发送到服务器 在 Visual Basic 2010 中 然后接收字符串回复 您可以通过 HttpWebRequest 来完成此操作 只需设置HttpWebRequest Method http msdn m
  • 通过字符串从枚举获取 Case

    我寻找一个简单的解决方案来通过字符串获取枚举的情况 有 BackedEnums 例如
  • 如何在向量的每个值之间写入逗号?

    我想将向量导出到文件中 每个值之间用逗号分隔 我尝试过使用paste with sep 但它不起作用 有谁知道为什么 gt x lt rnorm 10 gt paste x sep 1 1 08574649988891 2 95803811
  • C 中如何解析链接宏?

    如果我想使用预处理器 define语句可以轻松定义和计算常量和常用函数 并利用较少的 RAM 开销 与使用const值 但是 我不确定如果同时使用多个宏 它们将如何解决 我正在设计自己的DateTime代码处理 类似于 Linux 时间戳
  • 为 Python 3.x 编译 zbar

    几年前 我花了一些时间寻找一种方法zbar使用 Python 2 7 Windows x64 我发布了这个工作解决方案 如何在 最好是纯 Python 中解码 QR 码图像 https stackoverflow com questions
  • 单击模式框时按钮没有被触发

    Assign a Textbox Value to the modal box on the same page已答复 新问题 为什么当我单击按钮时模式框上的按钮没有被触发 我错过了什么吗 我添加了代码来处理服务器端的点击事件 Protec
  • 如何让元素在容器内浮动

    我想把 container在屏幕中央并制作 图表 float left在 的里面 container 但是使用下面的代码 图表 位于 container 谁能告诉我如何更改代码 并告诉我为什么代码将 图表 放在 container cont
  • 什么是 virtualenv,为什么我应该使用它?

    我正在尝试使用此命令安装 Python 包 pip install
  • 如何使用selenium java在mozilla firefox上使用假网络摄像头

    我正在尝试自动化一个包含网络摄像头流的网站 为了使其自动化 我需要某种方法来伪造网络摄像头 我知道这个选项 use fake device for media stream在 Chrome 中模拟网络摄像头 这在 Chrome 中对我有用
  • jqGrid 和动态分组

    我正在对 jqGrid 进行一些动态分组 按照以下位置发布的示例 http www trirand com blog jqgrid jqgrid html http www trirand com blog jqgrid jqgrid ht
  • 服务器是否可以同时收到两个请求? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我对服务器如何处理数千个请求有点困惑 我想如果有数千个请求 最终其中两个请求必须同时到达服务器 如果两条消息同时到达它 它只能处理一条 对
  • PHP:使用 preg_match 获取 url 变量?

    http www example com id 05 or http www example com id 05 name johnny 这是一个字符串 我想得到的值 id从中 它的正确模式是什么 您不需要正则表达式 除非您有充分的理由 否
  • 防止 HttpClient 4 遵循重定向

    我正在使用 Apache HttpComponents 库连接到我的 AppEngine 应用程序 为了对我的用户进行身份验证 我需要将身份验证令牌传递到应用程序的登录地址 http myapp appspot com ah login a