4

I need to make petitions against a https server and download data that the server sends back (text, video files or image files), inside my Android app.

It works fine in the terminal of suse Linux and wget or curl. Request have this structure:

wget --post-data "token=xxxx&option1=1&option2=4&File=video" https://api.serverx.com/ --no-check-certificate

My question is if there is any wget or similar working in Android, or how can I make this kind of petitions in another way.

I read about implement wget in the NDK but I'd like to know your experience or recomendations. Thanks

Solution

Using NDK to port Wget was too complicated. After some research I found a solution using DefaultHttpClient and adding a couple of classes to avoid checking the certificates. I follow this article

SchemeRegistry schemeRegistry = new SchemeRegistry();
    schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    schemeRegistry.register(new Scheme("https", new EasySSLSocketFactory(), 443));

    HttpParams params = new BasicHttpParams();
    params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30);
    params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(30));
    params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);

    ClientConnectionManager cm = new SingleClientConnManager(params, schemeRegistry);
    DefaultHttpClient httpClient = new DefaultHttpClient(cm, params);
4

1 回答 1

4

为此使用 wget 或 ndk 是个坏主意:直接java使用并HttpClient用于制作发布请求:示例可以在此处找到。

响应将包含您的数据,准备好保存到文件中。

此外,你可以把它放在一个异步任务中,进度监控:分叉一个像 Curl ou wget 这样的外部进程应该作为最后的机会(与服务器通信显然不是)

于 2012-07-24T09:51:08.270 回答