Articles of httpurlconnection

使用HttpUrlConnection Android将base64编码图像发送到服务器

我正在尝试使用HttpUrlConnection将base64编码的图像发送到服务器。 我遇到的问题是大多数图像都成功发送,但有些图像会生成FileNotFoundexception。 我可以在下面find编码图像的代码。 public static String encodeImage(Bitmap thumbnail) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); thumbnail.compress(Bitmap.CompressFormat.JPEG, 100, baos); byte[] b = baos.toByteArray(); String imageEncoded = Base64.encodeToString(b,Base64.URL_SAFE); return imageEncoded; } 当我改变这条线时: String imageEncoded = Base64.encodeToString(b,Base64.URL_SAFE); 至: String imageEncoded = Base64.encodeToString(b,Base64.DEFAULT); 然后大多数图像生成FileNotFoundException,一些成功发送到服务器。 下面是我的HttpUrlConnection的代码: public class HttpManager { public static String getData(RequestPackage p) { BufferedReader reader = null; String […]

VM广泛的cookie管理意味着什么?

我正在学习在Android中存储cookies ,并且遇到了几种实现它的方法。 其中一个是使用CookieManager and CookieStore 。 当我浏览Android文档时,我发现了以下声明: 为了在客户端和服务器之间建立和维护可能长期存在的会话,HttpURLConnection包括一个可扩展的cookie管理器。 使用CookieHandler和CookieManager启用VM范围的cookie管理: CookieManager cookieManager = new CookieManager(); CookieHandler.setDefault(cookieManager); 我不明白VM-wide cookie management的含义。 我知道VM意味着Virtual Machine 。 我的解释: 我解释它的一种方法是,创建一个CookieManager并将其传递给setDefault()使其在整个应用程序中可用。 因此,我尝试了以下测试。 URL url = new URL(“http://something.com”); URI uri=new URI(“http://something.com”); urlConnection = (HttpURLConnection) url.openConnection(); cks=urlConnection.getHeaderField(“Set-Cookie”); //cks is a String cookieManager=new CookieManager(); CookieHandler.setDefault(cookieManager); HttpCookie hc=new HttpCookie(“Cookie1”,cks); cookieManager.getCookieStore().add(uri,hc); cks1=cookieManager.getCookieStore().getCookies().get(0).getValue(); //cks1 is another String 我将cks and […]

Android – HttpUrlConnection没有关闭。 最终导致SocketException

我在运行Jellybean(4.1 – 4.3)的设备中遇到HttpUrlConnection的一些问题,其中连接未关闭并且在执行多次后导致SocketException“Too many open files”。 我确实调用了HttpUrlConnection.disconnect()并关闭了finally块中的所有Inputstream,Outputstream,Reader和Writers。 转到adb shell并执行netstat显示应用程序创建的所有连接都处于CLOSE_WAIT状态。 InputStream inputStream = httpUrlConnection.getInputStream(); // After calling inputStream.read() then the problem occurs. I think the // inputstream doesn’t get closed even after calling close in a finally block. // The InputStream is a ChunkedInputStream if that helps. 我尝试过在2.3.3,4.0.3和4.4上运行的其他设备并没有遇到这个问题。 还有其他方法可以手动关闭连接吗?

android,httpurlconnection错误

我正在从Android HttpURLConnection文档运行以下测试Java脚本: URL url = new URL(“http://www.android.com/”); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.connect(); Eclipse(在我的Mac上)告诉我在Android模拟器中运行时出现系统错误: 01-13 13:44:32.767: WARN/System.err(1382): java.net.SocketException: Permission denied (顺便说一下,当我在Objective-C / Cocoa中做相同的事情时,根本就没有问题。) 问题是什么?

用于跟踪登录会话的Android App策略

我有一些PHP脚本登录并返回带有会话ID的JSON数组(如果登录成功)。 在我的应用程序中,我想登录首页并继续浏览正在登录的应用程序。我创建了一个单例类,其中包含从PHP页面的JSON接收的会话ID(以及其他一些字段)。 根据用户的操作,检查此单例对象的字段“session_id”。 如果用户想要注销,则session_id只会被设置为null,从而退出。 我还使用HttpURLConnection库在登录时POST用户名/密码。 这是处理这种情况的一种不错的方法吗?

URLConnection getContentLength()返回负值

这是我的代码: url = paths[0]; HttpURLConnection connection = (HttpURLConnection) url.openConnection(); int length = connection.getContentLength(); // i get negetive length InputStream is = (InputStream) url.getContent(); byte[] imageData = new byte[length]; int buffersize = (int) Math.ceil(length / (double) 100); int downloaded = 0; int read; while (downloaded < length) { if (length < buffersize) { read = is.read(imageData, […]

在Android 4.2上,httpurlconnection非常慢

我可以使用httpurlconnection成功连接,发送和接收数据。 但是在我的手机(三星s4,4.2)和Android 4.2模拟器上加载所有数据需要很长时间。 但是在Android 2.3.x模拟器上加载图片需要大约1-2秒(这是非常快的)。 在http连接上比我的galaxy s4更快。 我正在使用AsyncTask,我的代码在两者上运行良好。 它在android 4.2s上很慢。 我尝试删除chunkedStreaming,保持活着,更改超时值等但仍然没有成功 这是我的代码 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod(“POST”); urlConnection.setDoOutput(true); urlConnection.setDoInput(true); urlConnection.setUseCaches(false); urlConnection.setChunkedStreamingMode(0); urlConnection.setRequestProperty(“Connection”, “Keep-Alive”); urlConnection.setConnectTimeout(6000); urlConnection.setReadTimeout(6000); urlConnection.setRequestProperty(“Content-Type”, “multipart/form-data;charset=UTF-8;boundary=”+boundary); urlConnection.connect(); 4.2和2.3.x的httpurlconnections之间有什么区别吗? 这里错了 UPDATE! 我通过使用Log.e()来测试哪一行占用了大部分时间。 ///// other staff ////…… Log.e(“HTTP”,”3″); if (isCancelled()) return (null); // don’t forget to terminate this method Log.e(“HTTP”,”3″); //Output DataOutputStream outputStream = new […]

Android(Java)HttpURLConnection静默重试’读’超时

所以我使用Google Volley进行HTTP请求,它主要使用Java的HttpURLConnection 。 根据我的测试, 问题是 : 当HttpURLConnection上的’read’超时到达时,在连接关闭之前执行静默重试并抛出相关的exception( SocketTimeoutException )。 请注意 : – 使用HTTP POST请求时我注意到了这个错误。 – ‘read’超时与’connect’超时不同。 – 如果’read’超时(通过调用connection.setReadTimeout(int)设置)未设置(0),或设置为大于connection.setConnectTimeout(int)值,则不会发生此错误。 – 这个问题已经在这里讨论了,但是我没有find任何令人满意的解决方案。 – 这里可以find一个有点相关的问题,但我不确定它是否相关(是吗?) 更多背景 我的应用程序用于付钱,所以不重试请求是至关重要的(是的,我知道它可以由服务器处理,我希望我的客户端“正确”)。 设置’read’超时时,如果服务器连接已建立,但服务器在应答之前等待/ sleeps / delays-response’超时’时间(从而引发’read’exception,而不是’connect’exception) ,在引发exception之前发送另一个(静默)请求,导致2个类似的请求,这是不可接受的。 我在找什么样的解决方案? 好吧,一个很好地解决这个问题/错误,就像这里解释的修复(但我再次,我认为这在这种情况下是无关紧要的)。 此外,我希望保持原始流程不变,这意味着不要强制连接关闭或类似的东西。 我现在要做的是,将’read’超时设置为’connection’超时的两倍(它们同时开始计数),以确保首先引发’connection’exception。 我还将尝试在服务器端克服此问题。 问题是,这个“读取”超时是有原因的,而我当前的实现实际上只是忽略它,并且只处理“连接”超时。 编辑 Volley库的RetryPolicy对此问题没有影响,因为这是一个无声的重试。 我在图书馆里看起来尽可能深。 到处记录/断点,取消了重试的调用。 我怎么知道这是一个HttpURLConnection问题的99.99%。

HttpURLConnection – “https://”与“http://”

我试图获取用户输入的url的图标,例如 _url = “google.com”; 我使用HttpUrlConnection从主机url的/favicon.ico扩展中获取favicon的位图。 String faviconString = Uri.parse(_url).getHost() + “/favicon.ico”; URL faviconUrl = null; Bitmap favicon = null; try { faviconString = “http://” + faviconString; faviconUrl = new URL(faviconString); HttpURLConnection connection = (HttpURLConnection) faviconUrl.openConnection(); connection.setDoInput(true); connection.connect(); favicon = BitmapFactory.decodeStream(connection.getInputStream()); } catch (IOException e) { e.printStackTrace(); } return favicon; 但是,由于用户可能不会指定http://或https:// ,因此我必须自己添加它。 我遇到的问题是,如果我在http://前添加http:// ,一切都会正常工作,但对于https:// ,某些网站会返回图标,其他网站只会给我null。 如何找出哪个页面使用https […]

HttpURLConnection:java.lang.IllegalStateException:已经连接

我正在尝试使用HttpURLClient使用下面显示的HttpRestClient类将一些POST数据发送到服务器。 执行时 conn.setDoInput(true); 我明白了 java.lang.IllegalStateException: Already connected 我卸载了应用程序,仍然得到相同的错误。 在所有示例中,我都看到openConnection在setDoInput之前被调用。 如果顾名思义, openConnection打开一个连接,它应该永远不会在`setDoInput之前使用,对吗? 我错过了什么? 也许在某些时候它在执行disconnect之前崩溃了。 这可能是原因吗? 如果是这样,我该如何断开旧连接? public class HttpRestClient { static public int post(String urlStr, List data){ HttpURLConnection conn = null; try { URL url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestMethod(“POST”); OutputStream os = conn.getOutputStream(); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os, […]