Articles of httpclient

Android – 定期发生HttpClient超时

嗨我已经问过这个问题,但是这次我检查一下这个方法是否允许所有证书都没有引起问题。 我开发了一个也在iPhone上的应用程序。 问题是api请求。 我为所有请求设置了超时。 有时它发生在30-60秒之间。 它看起来像应用程序确实耦合请求而不是打破,所有的时间超时,大约45秒后一切都好。 我不知道这是服务器问题还是android。 在使用IOS 5的iPhone上不会出现此问题,但在IOS 4上也不会出现此问题。 我检查了HttpClient,还检查了HttpsURLConnection。 连接是https,也是直接尝试IP地址。 所有请求都有相同的问题,所有请求都在异步任务中。 它们看起来都一样: DefaultHttpClient client = new HttpSupport().getNewHttpClient(); client.getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST,AuthScope.ANY_PORT),new UsernamePasswordCredentials(user, pass)); HttpGet httget = new HttpGet(“xxxxxxxxxxxxxxxxxxxxxxx”); httget.setHeader(“Accept”, “application/json”); HttpResponse respond = null; try { respond = client.execute(httget); } catch (ClientProtocolException e) { Log.e(TAG,”getEvents, ClientProtocolException”); } catch (IOException e) { Log.e(TAG,”getEvents, IOException: ” + […]

如何重新打包HttpClient 4.3.1并删除对commons-logging的依赖?

我想重新打包apache的httpclient lib,用一个Android应用程序发送它(比如https://code.google.com/p/httpclientandroidlib/但是使用HttpClient 4.3.1) 因此,我手动下载了httpclient 4.3.1 jar(包括其所有依赖项)并使用jarjar重新打包它: x@x$: cd libs && for f in *.jar; do java -jar ../jarjar-1.4.jar process ../rules.txt $f out/my-$f; done with rules.txt : rule org.apache.http.** my.repackaged.org.apache.http.@1 然后我用ant将输出放在一起: 我可以使用该文件来开发和测试我的应用程序,但如果我在android上部署它,它会抛出exception,因为它无法findmy.repackaged.org.apache.logging.log4j.something引用的my.package.org.apache.logging.whatEver 。 所以,现在我想通过使用字节码操作来消除对commons-logging的任何依赖。 这已经在以前完成: http : //sixlegs.com/blog/java/dependency-killer.html 但我想知道我是怎么做到的? org.apache.commons.logging.Log只有依赖项: x$x$: java -jar jarjar-1.4.jar find jar my-org-apache-httpclient-4.3.1.jar commons-logging-1.1.3.jar my/http/impl/execchain/ServiceUnavailableRetryExec -> org/apache/commons/logging/Log my/http/impl/execchain/RetryExec -> org/apache/commons/logging/Log my/http/impl/execchain/RedirectExec -> […]

如何使用内置框架对在Android中使用HttpClient的类进行unit testing?

我有一节课: public class WebReader implements IWebReader { HttpClient client; public WebReader() { client = new DefaultHttpClient(); } public WebReader(HttpClient httpClient) { client = httpClient; } /** * Reads the web resource at the specified path with the params given. * @param path Path of the resource to be read. * @param params Parameters needed to […]

我在哪里可以测试我的httpPost方法?

你可以建议一个服务器,我可以测试我的类发送和接收httpPost()方法的响应吗?

泄漏发现:AndroidHttpClient已创建且从未关闭

我没有在我的代码中的任何地方实例化AndroidHttpClient ,但我确实启动了识别器意图,在我的应用程序运行时会产生此exception: Leak found java.lang.IllegalStateException: AndroidHttpClient created and never closed at android.net.http.AndroidHttpClient.(AndroidHttpClient.java:152) at android.net.http.AndroidHttpClient.newInstance(AndroidHttpClient.java:138) at com.google.android.voicesearch.speechservice.SpeechServiceHttpClient.(SpeechServiceHttpClient.java:59) at com.google.android.voicesearch.speechservice.ServerConnectorImpl.(ServerConnectorImpl.java:85) at com.google.android.voicesearch.VoiceSearchContainerImpl.createRecognitionController(VoiceSearchContainerImpl.java:83) at com.google.android.voicesearch.GoogleRecognitionService.onCreate(GoogleRecognitionService.java:65) at android.app.ActivityThread.handleCreateService(ActivityThread.java:2066) at android.app.ActivityThread.access$2500(ActivityThread.java:123) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3835) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) at dalvik.system.NativeStart.main(Native Method) 假设该错误不在Android的代码中,但在我的代码中,这个泄漏的资源可能只在以下之一中创建: SpeechRecognizer.createSpeechRecognizer() new RecognitionListener() new Intent(SpeechRecognizer.RESULTS_RECOGNITION) SpeechRecognizer.startListening(recognizerIntent) 但我怎么知道哪一个?

在Xamarin中创建PCL时,.Net可移植子集中缺少HttpClient

我在Xamarin中创建了一个Portable类库,并希望将它用于Android应用程序。 我想在这个PCL中使用HttpClient 。 我已经从NuGet包管理器添加了Microsoft Http Client libraries 。 我现在可以看到.Net portable subset添加到我的引用中。 但不知何故,我仍然无法使用HttpClient ,也没有在.Net可移植子集中显示。 此外,我的PCL的Current profile是4.0-Profile 158 。 如果我将配置文件更改为4.5,Xamarin崩溃并且无法打开解决方案 谁能帮我这个? 谢谢

有没有办法阻止HttpClient在AsyncTask中的执行?

我有一个使用HttpClient处理相当长的下载的AsyncTask。 如果用户完成启动它的Activity,我想停止执行此请求。 我怎样才能做到这一点? 所以我启动了AsyncTask,HttpClient在execute()中,处理一个GET请求,有没有办法终止这个?

Android HttpClient身份validation始终返回401代码

我正在尝试使用HTTP身份validation在线发布玩家得分,但响应总是401(未经授权),尽管我非常确定用户名和密码是否正确。 我究竟做错了什么? DefaultHttpClient client = new DefaultHttpClient(); Credentials creds = new UsernamePasswordCredentials(“user”, “passsword”); client.getCredentialsProvider().setCredentials(new AuthScope(“http://myurl.com/score.php”, 80), creds); try { HttpPost post = new HttpPost(“http://myurl.com/score.php”); List nameValuePairs = new ArrayList(3); nameValuePairs.add(new BasicNameValuePair(“score”, points)); nameValuePairs.add(new BasicNameValuePair(“name”, name)); post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = client.execute(post); final int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { throw new Exception(); } […]

Apache HttpClient 4.0在Android上无法为套接字超时

我正在开发一个Android应用程序,需要使用HttpClient才能将文件从Android设备上传到Web服务器。 我上传的文件最大可达1 Gb,因此如果设备在上传过程中丢失连接,可能会发生超时。 奇怪的是,我为套接字设置的超时似乎没有任何影响。 每当我失去连接而不是引发SocketTimeoutException时,应用程序就会挂起。 我试过用: HttpConnectionParams.setConnectionTimeout(params, CrashLogParams.TIMEOUT); HttpConnectionParams.setSoTimeout(params, CrashLogParams.TIMEOUT); 但这只适用于连接超时,而不是套接字超时。 我也尝试过: HttpParams p = httpclient.getParams(); p.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000); p.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000); 我知道连接超时工作的原因是因为,我会在执行后获得连接超时的exception httpclient.execute(httppost); 在上载期间连接丢失时,应用程序似乎挂起,但在应用程序成功连接到服务器之后。 为了测试我的应用程序,我在不同的时间禁用了网络以查看应用程序的反应。 如果我在发送请求之前禁用网络,我会收到连接错误,我的应用程序可以正常处理,但如果我在上传期间禁用它,应用程序将挂起。 当然,我正在通过AsyncTasks执行所有这些请求,因此主UI线程不会崩溃。 我只是想知道是否还有其他方法可以确保套接字在没有收到任何数据时会超时,或者我在这里遗漏了什么。 我已经阅读了很多博客和post,但大多数人只是建议使用SO_TIMEOUT,这对我不起作用。 sotimeout不能在android 2.1上的多部分httppost中工作

HttpPost的HttpClient执行在Android 3.2上显着慢于2.3.3

任何人都知道为什么下面的代码在Android 3.2(三星Galaxy 10.1“Tab)上比在2.3.3(摩托罗拉Droid X)上运行慢4倍? 在Android 2.3.3上, client.execute()调用平均需要350毫秒 。 3.2以下平均需要1400毫秒 。 此外,无论是在UI线程还是后台线程中运行,结果都是相同的。 这是操作系统错误还是硬件问题? 或者我在代码中没有做正确的事情? 不幸的是我不能让ADB连接到我的3.2虚拟设备,所以我不能排除硬件问题,但我的直觉告诉我这是一个Honeycomb问题。 HttpResponse resp = null; HttpParams params = new BasicHttpParams(); params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); HttpClient client = new DefaultHttpClient(params); ArrayList postParms = new ArrayList(); postParms.add(new BasicNameValuePair(“name”, “test”)) try { HttpPost hp = new HttpPost(“http://myserver/path/method”); UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParms); hp.setEntity(formEntity); Long start = SystemClock.elapsedRealtime(); […]