Articles of httpclient

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(); […]

Android DefaultHttpClient HttpResponse缺少Set-Cookie标头字段

我有一个服务器使用spring security remember-me-authentication,我在POST方法中使用Android DefaultHttpClient登录。 我能够成功登录甚至能够检索创建的会话cookie(在我的情况下,jsessionid cookie和spring security记住我的cookie)。 但奇怪的是在执行POST方法之后 mResponse = mDefaultHttpClient.execute(mHttpPost) 我能够检索cookie,但只能在我的DefaultHttpClient中使用getCookieStore方法 mDefaultHttpClient.getCookieStore() 不使用HttpResponse对象的getAllHeaders方法 headers = mResponse.getAllHeaders(); HeaderIterator headerIterrator = new BasicHeaderIterator(headers, null); while (headerIterrator.hasNext()) { Header header = headerIterrator.nextHeader(); headerStringBuilder.append(” ” + header.getName() + “:” + header.getValue()); } Log.e(“Post response headers: “, headerStringBuilder.toString()); 我在这里得到一些标题(服务器,X-powered-By,日期,内容types,内容长度),但不是Set-Cookie标题或其他一些(Access-control-Allow- * etc) 谢谢你的帮助! 更新:看起来DefaultHttpClient不会暴露某些标头。 我尝试添加响应拦截器(如下所示)和getAllHeaders返回我想要的所有标头。 感谢您阅读我的问题! mDefaultHttpClient.addResponseInterceptor(new HttpResponseInterceptor() { public […]

包含花括号的URL的HttpClient问题

我在我的Android应用程序中使用HttpClient。 在某些时候,我必须从远程位置获取数据。 下面是我如何利用HttpClient获取响应的片段。 String url_s = “https://mydomain.com/abc/{5D/{B0blhahblah-blah}I1.jpg”; //my url string DefaultHttpClient httpClient = new DefaultHttpClient(); response = httpClient.execute(new HttpGet(url_s)); 它在大多数情况下都可以正常工作,但在我的url中基本上是字符串时有一些花括号。 堆栈跟踪显示花括号的索引,说无效字符。 所以我尝试从编码的URL创建URI。 URL url = new URL(url_s); URI uri = url.toURI(); response = httpClient.execute(new HttpGet(uri)); 在这样做之后,我根本没有从远程位置获得结果。 我解决了这个问题并通过更换大括号来修复它 “{”with“%7B” 带有“%7D”的“}” 但我并不完全满意我的解决方案。 还有更好的解决方案吗? 有什么东西整洁而不像我的硬编码?

从org.apache.http.HttpResponse获取建议的文件名

在Android中,您可以使用org.apache.http类HttpClient , HttpGet和HttpResponse下载文件。 如何从HTTP请求中读取建议的文件名? 例如在PHP中,你会这样做: header(‘Content-Disposition: attachment; filename=blah.txt’); 如何使用Android / Java中的Apache类获取“blah.txt”?

org.apache.http.entity.FileEntity在Android 6(Marshmallow)中已弃用

我正在将应用程序升级到API 23,其中不推荐使用org.apache.http 。 我当前(已弃用)的代码如下所示: HttpClient httpClient = new DefaultHttpClient(); File file = new File(attr.Value); String url = server_url; HttpPost request = new HttpPost(url); FileEntity fileEntity = new FileEntity(file, “image/png”); request.setEntity(fileEntity); HttpResponse response = httpClient.execute(request); String output = getContent(response.getEntity().getContent()); 我已经find了一些关于如何使用HttpURLConnection进行此操作的建议,但它们比当前的解决方案(不能再使用)复杂得多。 我正在谈论用于执行与上述相同function的许多代码行。 示例包括: 此页面和此页面 有没有人有一个很好的固定更短的解决方案呢?

从Android上传图像到PHP服务器

我需要将图像上传到远程PHP服务器,该服务器需要HTTPPOST中的以下参数: *$_POST[‘title’]* *$_POST[‘caption’]* *$_FILES[‘fileatt’]* 大多数互联网搜索建议: 下载以下类并尝试使用MultiPartEntity发送请求: apache-mime4j-0.5.jar httpclient-4.0-beta2.jar httpcore-4.0-beta3.jar httpmime-4.0-beta2.jar 要么 使用URLconnection并自己处理多部分数据。 顺便说一下,我热衷于使用HttpClient类而不是java.net(或者是android.net)类。 最后,我从Android源代码下载了Multipart类,并在我的项目中使用它们。 虽然这可以通过任何上述方法来完成,但我想确定这些是否是实现上述目标的唯一方法。 我浏览了文档并find了一个FileEntity类,但是我无法让它工作。 在Android应用程序中完成此操作的正确方法是什么? 谢谢。

DefaultHttpClient超时

我对DefaultHttpClient的超时工作方式有点困惑。 我正在使用此代码: private DefaultHttpClient createHttpClient() { HttpParams my_httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(my_httpParams, 3000); HttpConnectionParams.setSoTimeout(my_httpParams, 15000); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme(“http”, PlainSocketFactory.getSocketFactory(), 80)); ThreadSafeClientConnManager multiThreadedConnectionManager = new ThreadSafeClientConnManager(my_httpParams, registry); DefaultHttpClient httpclient = new DefaultHttpClient(multiThreadedConnectionManager, my_httpParams); return httpclient; } 。 String url = “http://www.example.com”; DefaultHttpClient httpclient = createHttpClient(); HttpGet httpget = new HttpGet(url); try { […]

执行httpclient时出现奇怪的错误

我在我的项目中创建了一个http请求。 我坐着它但是没有那么简单的部分来测试它:这就是它: HttpClient cl = new DefaultHttpClient(); try { HttpResponse httpResponse = cl.execute(new HttpGet(“http://www.google.com”)); System.out.println(httpResponse.getEntity().getContentLength()); } catch (Exception e) { System.out.println(“didn’t work!”); System.out.println(e.getMessage()); } 但是当我运行它时,我得到了这些: 07-21 15:57:36.203 26851-26851/com.akgradev.upbman W/﹕ Unable to open ‘/system/framework/qcom.fmradio.jar’: No such file or directory 07-21 15:57:36.203 26851-26851/com.akgradev.upbman W/art﹕ Failed to open zip archive ‘/system/framework/qcom.fmradio.jar’: I/O Error 当然是“没有用!” 印刷品的“空”! 我感谢你的提示Tnx