【问题标题】:how to send multiple requests using same client? [closed]如何使用同一个客户端发送多个请求? [关闭]
【发布时间】:2013-07-27 07:46:48
【问题描述】:

我正在编写一个 Android 应用程序,它需要同时使用一个 httpClient 发送多个 POST 请求。

在我的应用程序中,httpClient 发送登录请求并设置其会话并且客户端已登录,我想使用相同的客户端(已登录)下载一些图片,并且我希望完成下载同时,我该怎么做?

【问题讨论】:

  • 这有点奇怪。为什么是同一个客户?为什么同时?通常如果你想同时运行多个请求,你会使用多个线程,每个线程都有自己的 HttpClient。至少您需要更改使用的客户端连接管理器,以便它同时创建多个连接。 hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/…
  • @couling 因为我想同时从一个服务器下载一些图片,并且客户端需要登录,所以我想用一个httpclient下载所有的照片,如何更改客户端连接经理?
  • Http 从不保证保持相同的连接。在此处使用相同的连接管理器可能无济于事。 Http 服务器很少以这种方式维护会话。您是否有更多关于您尝试连接的服务器的详细信息?
  • 只需让服务器上的登录脚本将图像数据连同成功的登录数据一起返回,就像在带有 base64 编码图像数据的 json 对象中一样,将数据解码为位图并使用。

标签: java android post httpclient


【解决方案1】:
HttpClient createClient() {
    HttpParams params = new BasicHttpParams();
    params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
    params.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, HTTP.DEFAULT_CONTENT_CHARSET);
    params.setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, true);
    params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30 * 1000);
    params.setParameter(CoreConnectionPNames.SO_TIMEOUT, 30 * 1000);

    SchemeRegistry schReg = new SchemeRegistry();
    schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
    ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg);

    return new DefaultHttpClient(conMgr, params);
}

【讨论】:

    【解决方案2】:

    要使用同一个 httpclient 执行多个请求,您可以使用

    MultiThreadedHttpConnectionManager conMgr =new MultiThreadedHttpConnectionManager();
    httpClient = new HttpClient(conMgr);
    

    MultiThreadedHttpConnectionManager 允许一次执行多个方法。

    但您可能想根据自己的需要进行配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 2012-04-07
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      相关资源
      最近更新 更多