Articles of httpclient

Android是否同时支持多个HTTP请求?

在我的应用程序中,我想同时处理几个文件的下载。 为此,我将启动多个服务,每个请求一个。 我不确定,Android是否支持并行的http请求? 在这种情况下,每个请求有一个HTTPClient是好习惯还是坏习惯? 非常感谢您的帮助!

Android – 发送HTTPS获取请求

我想向谷歌购物api发送一个HTTPS获取请求,但是没有什么对我有用,例如这里是我正在尝试的内容: try { HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(); request.setURI(new URI(“https://www.googleapis.com/shopping/search/v1/public/products/?key={my_key}&country=&q=t-shirts&alt=json&rankByrelevancy=”)); HttpResponse response = client.execute(request); } catch (URISyntaxException e) { e.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return response; } 如果有人对如何改进或更换它有任何建议,请提前告知我们。

URLConnection或HTTPClient:哪个提供更好的function和更高的效率?

我希望为Android应用程序创建一个登录表单。 我想使用post方法将信息发送到服务器端,由PHP文件处理它; 然后validation参数并发回响应。 我看一下使用HttpClient和URLConnection的实现,它们非常相似。哪个在Android应用程序中使用效率更高? 谢谢Fabii

Android Java UTF-8 HttpClient问题

我从一个网页抓取的JSON数组有奇怪的字符编码问题。 服务器正在发送回此标头: 内容types文本/ javascript; 字符集= UTF-8 此外,我可以在Firefox或任何浏览器中查看JSON输出,并正确显示Unicode字符。 响应有时会包含来自其他语言的单词,带有重音符号等。 但是,当我将它拉下来并将其放入Java中的字符串时,我会得到那些奇怪的问号。 这是我的代码: HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, “utf-8”); params.setBooleanParameter(“http.protocol.expect-continue”, false); HttpClient httpclient = new DefaultHttpClient(params); HttpGet httpget = new HttpGet(“http://www.example.com/json_array.php”); HttpResponse response; try { response = httpclient.execute(httpget); if(response.getStatusLine().getStatusCode() == 200){ // Connection was established. Get the content. HttpEntity entity = response.getEntity(); // If the […]

在android中取消Http连接

我正在使用org.apache.http ,我有这个代码: DefaultHttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(url); HttpResponse resp = client.execute(get); HttpEntity entity = resp.getEntity(); InputStream input = entity.getContent(); … //Read the bytes from input stream 这是我用来通过Http下载文件的代码,我想取消连接(可能是用户选择的)什么是关闭连接的优雅方式。 我find了两种方法,两种都取消了下载。 关闭inputsteram,input.close(); 这会导致IOException。 中止HttpGet对象,get.abort()会导致SocketException。 我试过catch,所以没有错误,但没有抛出exception,有没有办法取消或中止连接? 什么是正确的方法呢?

Android上的DefaultHttpClient中连接和套接字超时的默认值是什么?

在Android 2.1 / 2.2上,我使用Android SDK中的DefaultHttpClient 。 Apache在他们的文档中说有两个超时: CoreConnectionPNames.SO_TIMEOUT =’http.socket.timeout’:定义套接字超时(SO_TIMEOUT),以毫秒为单位,即等待数据的超时,换句话说,两个连续数据包之间的最大周期不活动。 超时值为零被解释为无限超时。 此参数需要java.lang.Integertypes的值。 如果未设置此参数,则读取操作不会超时(无限超时)。 CoreConnectionPNames.CONNECTION_TIMEOUT =’http.connection.timeout’:确定建立连接之前的超时(以毫秒为单位)。 超时值为零被解释为无限超时。 此参数需要java.lang.Integertypes的值。 如果未设置此参数,则连接操作不会超时(无限超时)。 我尝试在Android源中搜索这两个超时的默认值,但无法find。 有谁知道这些超时的默认值是什么? 我想获得一个链接到值设置的源或关于此的官方文档(而不仅仅是听取意见)。

使用loopj AsyncHttpClient获取SocketTimeoutExceptions …我可以设置超时值吗?

当使用loopj AsyncHttpClient库时,我在发出请求时不断获取java.net.SocketTimeoutExceptions(见下文)。 我可以设置一些超时值吗? 注意 :我发布这个是希望为其他人提供一些帮助。 我(愚蠢地)努力寻找解决方案一段时间。 堆栈跟踪: java.net.SocketTimeoutException at java.net.PlainSocketImpl.read(PlainSocketImpl.java:491) at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46) at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240) at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103) at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191) at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82) at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174) at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180) at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) at com.loopj.android.http.AsyncHttpRequest.makeRequest(AsyncHttpRequest.java:76) at com.loopj.android.http.AsyncHttpRequest.makeRequestWithRetries(AsyncHttpRequest.java:95) at com.loopj.android.http.AsyncHttpRequest.run(AsyncHttpRequest.java:57) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:390) at java.util.concurrent.FutureTask.run(FutureTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) at java.lang.Thread.run(Thread.java:856)

检测并处理需要登录的wifi

我在一个Android应用程序中使用HttpClient 4.1,并试图让我的应用程序的API请求被其中一个“你需要登录或支付wifi”屏幕截获。 我想popup一个允许用户登录的webview。 我一直试图拦截httpClient中的重定向,但我没有成功。 这就是我目前正在尝试的: this.client = new DefaultHttpClient(connectionManager, params); ((DefaultHttpClient) this.client).setRedirectStrategy(new DefaultRedirectStrategy() { public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) { boolean isRedirect = Boolean.FALSE; try { isRedirect = super.isRedirected(request, response, context); } catch (ProtocolException e) { Log.e(TAG, “Failed to run isRedirected”, e); } if (!isRedirect) { int responseCode = response.getStatusLine().getStatusCode(); if (responseCode […]

Android HttpClient – 证书中的主机名与!= 不匹配

我在Android上使用HttpClient连接到https://someUrl.com/somePath 。 问题是网站的证书是针对* .someUrl.com而不是someUrl.com的,所以我得到了一个SSLException。 网站上有跛脚,是的,但除非我能解决它,否则我会陷入困境。 有没有办法让HttpClient放松并接受证书?

android中的https(无对等证书)问题

问题 我想将https请求发送到我自己的服务器站点https://10.2.20.20/fido/EzPay/login.php并从中获取响应并将其保存为例如字符串。 我在互联网上find了一些示例代码,并尝试测试它们以解决我的问题,但它们没有帮助。 下面我介绍一些我测试过的代码部分。 代码示例: 我试试这段代码,但我总是得到同样的例外“没有同行证书”为什么? try { HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER; DefaultHttpClient client = new DefaultHttpClient(); SchemeRegistry registry = new SchemeRegistry(); SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory(); socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier); registry.register(new Scheme(“https”, socketFactory, 443)); SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry); DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams()); // Set verifier HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier); // Example send http request final String […]