【问题标题】:How to do http post using apache httpclient with web authentication?如何使用具有 Web 身份验证的 apache httpclient 进行 http post?
【发布时间】:2011-09-27 13:23:07
【问题描述】:

我为此搜索了很多,但找不到合适的解决方案。使用凭据提供程序的方法很糟糕,因为它发出的调用量是所需调用量的两倍,即它触发请求,获得 401,然后才使用网络身份验证凭据触发请求。

任何使用android的httpclient库成功地对web auth后面的URL进行http post请求的人?

【问题讨论】:

    标签: java android post httpclient


    【解决方案1】:

    对于 HttpClient 4.0.x,您使用 HttpRequestInterceptor 来启用抢先式身份验证 - 因为 AndroidHttpClient 类不公开 addRequestInterceptor(..) 方法,您可能必须使用 DefaultHttpClient 类。

    此示例将向任何感兴趣的服务器发送垃圾邮件user1/user1。如果您关心安全性,请调整AuthScope

    DefaultHttpClient 客户端 = 新 DefaultHttpClient(); client.getCredentialsProvider().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("user1", "user1")); client.addRequestInterceptor(new HttpRequestInterceptor() { public void process(HttpRequest request, HttpContext context) throws HttpException, IOException { AuthState 状态 = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE); if (state.getAuthScheme() == null) { BasicScheme 方案 = new BasicScheme(); CredentialsProvider credentialsProvider = (CredentialsProvider) context.getAttribute(ClientContext.CREDS_PROVIDER); 凭证凭证 = credentialsProvider.getCredentials(AuthScope.ANY); 如果(凭据 == null){ 抛出新的 HttpException(); } state.setAuthScope(AuthScope.ANY); state.setAuthScheme(方案); state.setCredentials(凭据); } } }, 0); // 0 = 第一个,你真的想成为第一个。

    【讨论】:

    • 非常感谢,会试试这个.. 在dlinsin.blogspot.com/2009/08/… 上发现了同样的事情,但我一定做错了什么。那个标志 0 代表什么,并没有真正理解它
    • 0是请求拦截器的位置,即0是第一个,它会先处理请求。
    • @Nitin 这个解决方案是由 Jeans 提供的吗?在这个链接上 dlinsin.blogspot.in/2009/08/… 为你工作?我也面临同样的 401 Unauthorized 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2011-03-18
    相关资源
    最近更新 更多