Articles of httpurlconnection

HttpUrlConnection在Android上找不到NTLM挑战

我试图使用HttpUrlConnection类将我的Android应用程序连接到IIS服务器。 我的服务器需要用户进行身份validation,所以它向客户端发送以下挑战: WWW-Authenticate: Negotiate WWW-Authenticate: NTLM 我的问题是,HttpUrlConnection似乎不parsing它。 所以getPasswordAuthentication()永远不会调用,并且返回一个IOException“找不到authentication问题”。 这是我的代码: Authenticator.setDefault(new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("myUsername", "myPassword".toCharArray()); } }); URL url = new URL(myUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Accept-Encoding", "gzip"); conn.setRequestProperty("Accept-Charset", "UTF-8"); conn.setRequestProperty("Accept", "*/*"); conn.setRequestProperty("Connection", "close"); conn.setDoOutput(true); conn.setDoInput(true); try { conn.connect(); status_code = conn.getResponseCode(); }catch (IOException e) { … […]

在jellybean的NetworkOnMainThreadException错误

我一直试图让这个工作在最后一个星期左右,仍然不知道是什么问题。 它适用于android 2.1,但不适用于4.1。 我得到这个string在一个服务,检查我的应用程序的更新。 latestVersion = Integer.parseInt(getHttpString(urlLatestVersion)); 它在checkForUpdate()中调用; 这在onStart(Intent intent,int startId)中被调用; private String getHttpString(String urlString) throws IOException { InputStream in = null; int response = -1; URL url = new URL(urlString); URLConnection conn = url.openConnection(); if (!(conn instanceof HttpURLConnection)) throw new IOException("Not an HTTP connection"); try { HttpURLConnection httpConn = (HttpURLConnection) conn; httpConn.setAllowUserInteraction(false); httpConn.setInstanceFollowRedirects(true); httpConn.setRequestMethod("GET"); […]

Android(Java)HttpURLConnection在'读取'超时时间进行无声重试

所以我使用Google Volley进行HTTP请求,它基本上使用Java的HttpURLConnection 。 根据我的testing, 问题是这样的 : 当HttpURLConnection上的'read'超时到达时,在连接closures之前执行无提示重试,并抛出相关的exception( SocketTimeoutException )。 请注意 : – 当使用HTTP POST请求时,我注意到了这个错误。 – “读取”超时与“连接”超时不同。 – 如果'read'超时(通过调用connection.setReadTimeout(int)设置)未设置(0),或者设置为比connection.setConnectTimeout(int)更大的值,则不会发生此错误。 – 这个问题已经在这里讨论过了,但是我还没有find任何令人满意的解决scheme。 – 这里可以find一个相关的问题,但我不确定它是否相关(是吗?) 更多的背景 我的应用程序用于付款,所以不要重试请求是至关重要的(是的,我知道它可以由服务器处理,我希望我的客户端是“正确的”无论如何)。 当设置“读取”超时时,如果服务器连接build立,但是服务器在应答之前等待/睡眠/延迟 – 响应(超时)时间(从而引起“读取”exception而不是“连接”exception) ,在引发exception之前发送另一个(静默)请求,导致2个类似的请求,这是不可接受的。 我在寻找什么样的解决scheme? 那么,一个将很好地解决这个问题/错误,就像这里解释的修复(但我再次,我认为这是无关紧要的)。 此外,我想保持原来的stream程,这意味着不要强迫连接closures或类似的东西。 我现在要做的是将'read'超时设置为连接超时的两倍(它们同时开始计数),以确保首先引发“连接”exception。 我也会尝试在服务器端克服这个问题。 问题是,这个“读”超时是有原因的,我目前的实现几乎忽略它,只处理“连接”超时。 编辑 RetryPolicy库的RetryPolicy没有影响这个问题,因为这是一个沉默的重试。 我在图书馆里面看得很深。 logging/断点到处,取消呼叫重试。 那我怎么知道这是一个99.99%的HttpURLConnection问题。

Android / Java:HttpURLConnection不会返回redirect文件的标题(例如在S3上)

我的代码(转载如下),连接到一个url,并将文件下载到Android上的磁盘。 所有标准的东西。 当我尝试在我们的服务器映射到一个存储区(例如foo.example.com => bucket,名为foo.example.com)上的子域访问S3上的文件上使用此代码时,它往往失败。 结果(使用方便的curl命令.. "curl -v -L -X GET http://foo.example.com/f/a.txt") ..这里有一个redirect。 文件下载工作正常,因为HttpURLConnection将默认遵循redirect,但需要标题信息(getContentLength,getHeaderFieldDate(“Last-Modified”,0)等)的调用返回来自307redirect的标题,而不是实际文件下载。 任何人都知道如何解决这个问题? 谢谢 File local = null; try { Log.i(TAG, "Downloading file " + source); conn = (HttpURLConnection) new URL(source).openConnection(); fileSize = conn.getContentLength(); // ** THIS IS WRONG ON REDIRECTED FILES out = new BufferedOutputStream(new FileOutputStream(destination, false), 8 * 1024); conn.connect(); stream […]

HttpUrlConnection.getInputStream在Android中返回空stream

我使用HttpUrlConnection向服务器发出GET请求。 连接后: 我得到的答复编号是:200 我收到回复消息:OK 我得到inputstream,没有抛出exception,但: 在一个独立的程序中,我得到了正如预期的那样: {“name”:“我的名字”,“生日”:“01/01/1970”,“id”:“100002215110084”} 在android活动中,stream是空的(available()== 0),因此我不能得到任何文本。 任何提示或跟踪? 谢谢。 编辑:这里是代码 请注意:我使用import java.net.HttpURLConnection; 这是标准的http Java库。 我不想使用任何其他外部库 。 事实上,我在android中使用库中的httpclient有问题(他们的一些匿名.class不能被apk编译器使用)。 那么,代码: URLConnection theConnection; theConnection = new URL("www.example.com?query=value").openConnection(); theConnection.setRequestProperty("Accept-Charset", "UTF-8"); HttpURLConnection httpConn = (HttpURLConnection) theConnection; int responseCode = httpConn.getResponseCode(); String responseMessage = httpConn.getResponseMessage(); InputStream is = null; if (responseCode >= 400) { is = httpConn.getErrorStream(); } else […]

在HttpURLConnection中停止无提示重试

我使用Android KitKat上的HttpURLConnection将一些数据发布到服务器。 服务器需要很长时间才能响应,并且连接正在静默地重试1到3次,然后才超时。 我不希望它重试,因为服务器作用于所有请求,导致Bad Things(TM)。 我打开连接之前尝试过System.setProperty("http.keepAlive", "false") ,但这并没有帮助。

Android KitKat HttpURLConnection断开AsyncTask

在我的应用程序中,我使用AsyncTask中的HttpURLConnection下载了一个文件。 如果文件下载时间过长,我想取消它; 我通过closuresstream并调用HttpURLConnection对象上的disconnect()来完成此操作。 该代码在Android中已经运行了多年。 但是,现在KitKat已经出来,问题已经出现了。 具体来说, disconnect()调用本身需要几秒钟或更长时间才能完成。 在KitKat之前的设备中,花费了一毫秒甚至更less的时间。 真奇怪的是,当我在一个单独的线程上执行断开连接调用时,它真的又快了。 所以在AsyncTask的doInBackground方法中调用它就成了一个问题。 有一点要注意的是,我的AsyncTask确实有一个Looper.prepare()调用。 有谁知道KitKat和其他Android版本有什么区别吗? 我梳理了更改列表,没有看到与这个问题有关的任何事情。

android,httpurlconnection错误

我从Android HttpURLConnection文档运行以下testingJava脚本: 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中做同​​样的事情时,根本没有问题。) 问题是什么?

使用HttpURLConnection发送UTF-8string

直到现在我已经使用下面的代码片段来发送和接收JSONstring: static private String sendJson(String json,String url){ HttpClient httpClient = new DefaultHttpClient(); String responseString = ""; try { HttpPost request = new HttpPost(url); StringEntity params =new StringEntity(json, "UTF-8"); request.addHeader("content-type", "application/json"); request.setEntity(params); HttpResponse response = httpClient.execute(request); HttpEntity entity = response.getEntity(); responseString = EntityUtils.toString(entity, "UTF-8"); }catch (Exception ex) { ex.printStackTrace(); // handle exception here } finally { […]

用于跟踪login会话的Android应用程序策略

如果login成功,我有一些PHP脚本login并返回带有会话ID的JSON数组。 在我的应用程序中,我想在首页login,并通过正在login的应用程序继续进行。我创build了一个单例类,它包含从PHP页面接收的来自JSON的会话ID(以及其他一些字段)。 这个单例对象的字段“session_id”被检查取决于用户做什么。 如果用户想注销,那么session_id只会被设置为空,从而注销。 我也使用HttpURLConnection库login时发送用户名/密码。 这是处理这种情况足够的方法吗?