Articles of httpurlconnection

Android HttpUrlConnection:发布Multipart

我正在尝试将测试文件发布到使用Android部署在tomcat上的spring rest servlet。 我正在开发Android 4.1.2,但我在4.0.3上validation了同样的问题。 问题是文件上载需要很长时间(对于4MB文件大约需要70秒),也在本地网络中。 使用3g连接可以节省时间。 我已经排除它可能是服务器问题:使用curl执行相同的调用需要1/2秒,并且使用apache作为后端结果是相同的。 使用HttpClient工作正常。 我正在使用Spring Android RestClient 1.0.1.RELEASE,并且考虑到Android版本以及我没有覆盖默认行为的事实,它使用HttpUrlConnection而不是HttpClient来发出http请求。 我还实现了我的自定义ClientHttpRequestFactory来操作SSL连接的一些细节,我已经定义了自己的ClientHttpRequestInterceptor实现来修改身份validation头。 我还设置了setBufferRequestBody(false)以避免对大文件的OutOfMemoryException 。 但是这个属性对所需的时间没有影响。 MyClientHttpRequestFactory : public class MyClientHttpRequestFactory extends SimpleClientHttpRequestFactory{ @Override protected void prepareConnection(HttpURLConnection connection, String httpMethod) throws IOException { super.prepareConnection(connection, httpMethod); connection.setConnectTimeout(240 * 1000); connection.setReadTimeout(240 * 1000); if (“post”.equals(httpMethod.toLowerCase())) { setBufferRequestBody(false); }else { setBufferRequestBody(true); } } @Override protected HttpURLConnection openConnection(URL […]

需要Android中的HttpResponseCache示例

嗨我正在尝试使用Android 4中引入的HttpResponseCache。文档确实谈到了如何安装缓存,但我完全失去了如何缓存从网上下载的图像。早期我使用的是DiskLruCache缓存它们。 有人会指出我使用HttpResponseCache的工作代码的一些例子。 编辑: – 有人能告诉我这里做错了什么: – MainActivity.java public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final long httpCacheSize = 10 * 1024 * 1024; // 10 MiB final File httpCacheDir = new File(getCacheDir(), “http”); try { Class.forName(“android.net.http.HttpResponseCache”) .getMethod(“install”, File.class, long.class) .invoke(null, httpCacheDir, httpCacheSize); Log.v(TAG,”cache set up”); } catch (Exception httpResponseCacheNotAvailable) { Log.v(TAG, “android.net.http.HttpResponseCache not available, […]

HttpURLConnection PUT到Google云端存储,提供错误403

我尝试使用XML API将文件上传到Google云端存储。 我为每次上传生成了正确的GoogleAccessId,到期日期和签名。 奇怪的是,我可以使用Postman(Chrome应用程序)PUT文件,所以我确定url没问题。 我只是无法使用我的Android Java程序将它PUT(它返回给我403错误)。 执行上传的源代码在此处(基于以下内容: https : //cloud.google.com/storage/docs/access-control#Signing-Strings ): URL url; HttpURLConnection connection; try { url = new URL(“http://google-testbucket.storage.googleapis.com/testdata.txt?GoogleAccessId=1234567890123@developer.gserviceaccount.com&Expires=1331155464&Signature=BClz9e4UA2MRRDX62TPd8sNpUCxVsqUDG3YGPWvPcwN%2BmWBPqwgUYcOSszCPlgWREeF7oPGowkeKk7J4WApzkzxERdOQmAdrvshKSzUHg8Jqp1lw9tbiJfE2ExdOOIoJVmGLoDeAGnfzCd4fTsWcLbal9sFpqXsQI8IQi1493mw%3D”); connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setRequestMethod(“PUT”); OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream()); out.write(“Test”); out.close(); Log.i(“TAG”, “PUT Response code: ” + connection.getResponseCode()); } catch (MalformedURLException e) { e.printStackTrace(); Log.e(“TAG”, “MalformedURLException”); } catch (ProtocolException e) { e.printStackTrace(); […]

针对API等级9及更高版本的AndroidHttpClient与HttpUrlConnection

对于API Level 9(Gingerbread)哪个更好,为什么? 使用AndroidHttpClient而不是HttpUrlConnection有什么好处吗? 任何帮助或指导将不胜感激。

Java,HttpURLConnection和设置内容长度

对于PUT,我在HttpURLConnection中设置内容的长度。 urlConnection.setRequestProperty(“Content-Length”, “” + responseJSONArray.toString(2).getBytes(“UTF8”).length); 实际的字节数是74.但是,当我查询urlConnection的内容长度时,我返回-1 。 这是为什么? 为什么长度不相等(鉴于我设定了这个)? 我必须设置内容长度,因为我收到了来自服务器的411响应。 (另外,在Sun 示例中,我看到setRequestProperty的第二个参数是inttypes而不是String ,这看起来很奇怪。)

重用HttpURLConnection以使会话保持活动状态

我们有一个Android应用程序,要求用户输入Captcha的答案。 Captcha是在我们的服务器上生成的。 回复时,会将其发送到服务器进行validation。 问题是因为我必须在请求Captcha之后关闭HttpURLConnection,然后发现回复正在服务器上的另一个会话上运行。 因此,Captcha检查失败,因为它取决于会话。 有没有办法保持连接活着或者我应该遵循不同的路径? 我知道在相应的iPhone应用程序中,它们保持“连接”,因此具有相同的sessionid。 编辑: CookieManager cookieManager = new CookieManager(); CookieHandler.setDefault(cookieManager); URL urlObj = new URL(urlPath); conn = (HttpURLConnection) urlObj.openConnection(); if (urlPath.toLowerCase().startsWith(“https:”)) { initializeHttpsConnection((HttpsURLConnection) conn); } conn.setRequestMethod(“POST”); conn.setRequestProperty(“Content-Language”, “en-US”); conn.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded”); conn.setRequestProperty(“Content-Length”, Integer.toString(bodyData.length)); if (_sessionIdCookie != null) { conn.setRequestProperty(“Cookie”, _sessionIdCookie); } // Connect conn.setDoInput(true); conn.setDoOutput(true); conn.connect();

维护HttpUrlConnection调用之间的会话(本机/ Webview)

让我从我想要的开始: 我想制作一个part native and part webviews的应用程序。 问题 – 维护本机和Webview部件之间的会话。 我处理这个的方法: 我打算实现一个本机登录,在其中我向用户提供两个EditTextboxes和一个按钮,用户输入凭据,我将它们作为JSON发布到服务器。 服务器响应成功或错误。 基于Success标志,我读取了此连接的标头值并解压缩SessionCookie: switch (responseCode) { case 200: BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String inputLine; response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); //IF SUCCESS Map<String, List> map = conn.getHeaderFields(); for (Map.Entry<String, List> entry : map.entrySet()) { System.out.println(“Key […]

DataOutputSteam给我一个’java.io.IOException:意外的流结束’?

我正在尝试使用HttpUrlConnection从Android应用程序发出WebService请求。 但有时它会起作用,有时则不起作用。 当我尝试发送此值时: JSON值 {“Calle”:”Calle Pérez 105″,”DetalleDireccion”:””,”HoraPartida”:”May 18, 2014 9:17:10 AM”,”Numero”:0,”PuntoPartidaLat”:18.477295994621315,”PuntoPartidaLon”:-69.93638522922993,”Sector”:”Main Sector”} 我在DataOutputStream关闭函数中得到了“意外的流结束”exception。 这是我的代码: DataOutputStream printout; // String json; byte[] bytes; DataInputStream input; URL serverUrl = null; try { serverUrl = new URL(Config.APP_SERVER_URL + URL); } catch (MalformedURLException e) { … } bytes = json.getBytes(); try { httpCon = (HttpURLConnection) serverUrl.openConnection(); httpCon.setDoOutput(true); httpCon.setUseCaches(false); httpCon.setFixedLengthStreamingMode(bytes.length); httpCon.setRequestProperty(“Authorization”, […]

Android上的HttpURLConnection失败

(已解决 – 见下面的评论 ) 我有一个实现多部分文件上传的类。 代码适用于我尝试过的每个Java客户端,除了Android,它是我的Android应用程序中唯一不能与我的后端服务一起使用的HTTP请求代码。 连接responseCode是“-1”所以这里有一些非常讨厌的东西。 在Apache访问或错误日志中没有显示任何条目,似乎请求永远不会脱离Android平台。 代码通过连接写入正确,但挂起连接读取,超时然后返回。 真实手机和模拟器的行为是相同的。 有没有人知道在Android中发布多部分文件时需要注意的任何问题? 我包括下面的课程(制作的小卫生模型),所以你可以看到我在做什么 import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class GeoPictureUploader { static String serviceDomain = “http://staging.abaqus.net”; static String postUrl = serviceDomain + “/geo/upl/wupload/pictures”; static String CRLF = “\r\n”; static String twoHyphens = […]

为什么android HttpURLConnection不遵守超时值?

我有以下代码块: try { URL url = new URL(“http://site-to-test.com/nonexistingpage.html”); HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); urlc.setRequestProperty(“User-Agent”, CoreProtocolPNames.USER_AGENT); urlc.setRequestProperty(“Connection”, “close”); urlc.setConnectTimeout(500); // timeout is in milliseconds urlc.connect(); if (urlc.getResponseCode() == 404) { // Server was reachable Log.i(TAG, “Server is reachable”); } } catch (MalformedURLException mue) { Log.e(TAG, “MalformedURLException: ” + mue.getMessage()); } catch (IOException e) { Log.e(TAG, “IOException: […]