Articles of httpurlconnection

java.io.IOException:未find身份validation质询

我是android的新手,这是我在android上的第一个项目。 我正在努力解决“身份validation”问题超过一天。 我尝试了几个选项,但没有一个可行。 基本上,我想调用REST API并获得响应。 我确信API中没有问题,因为我在另一个iOS应用程序中使用相同的API。 我传递授权标题但仍然显示身份validation未find消息。 我发现与stackoverflow相关的问题很少,但是其中一些没有用,有些对我没有意义。 我得到状态码401 。 我知道这意味着要么没有传递身份validation,要么传递,那么他们就错了。 在这里,我相信我通过的是正确的。 以下是我的代码: try { url = new URL(baseUrl); } catch (MalformedURLException me) { Log.e(TAG, “URL could not be parsed. URL : ” + baseUrl + “. Line : ” + getLineNumber(), me); me.printStackTrace(); } try { urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod(method); urlConnection.setConnectTimeout(TIMEOUT * 1000); […]

如何在Android OKHTTPClient请求上设置(OAuth令牌)授权标头

我能够在正常的HTTPURLConnection请求上设置Auth Header,如下所示: URL url = new URL(source); HttpURLConnection connection = this.client.open(url); connection.setRequestMethod(“GET”); connection.setRequestProperty(“Authorization”, “Bearer ” + token); 这是HttpURLConnection的标准配置。 在上面的代码片段中, this.client是Square的OkHTTPClient ( 这里 )的一个实例。 我想知道是否有一种特定于OkHTTP的设置Auth Header的方法? 我看到OkAuthenticator类,但我不清楚如何使用它/看起来它只处理身份validation挑战。 提前感谢任何指针。

使用HttpURLConnection和HttpsURLConnection连接到https?

如果我尝试使用HttpURLConnection和HttpsURLConnection连接到“https”有什么区别? 我能够使用HttpURLConnection和HttpsURLConnection连接到“https”,所以我很困惑。 如果我使用HttpsURLConnection?我以为我只能建立与“https”的连接HttpsURLConnection? 以下是我的一些问题: 如果我能够使用HttpURLConnection打开与“https”的连接,我的连接仍然是“https”还是变成“http”? 如何validation证书? 由于在连接到“https”时我的HttpURLConnection上没有任何SSLSocketFactory和HostnameVerifier ,我使用的SSLSocketFactory和HostnameVerifier是什么? 无论证书是否可信,这是否意味着我信任一切?

HttpURLConnection.getResponseCode()在第二次调用时返回-1

当我正在使用的库(路标1.1-SNAPSHOT)时,我似乎在Android 1.5上遇到了一个特殊的问题,它连续两次连接到远程服务器。 第二个连接始终失败, HttpURLConnection.getResponseCode()为-1 这是一个暴露问题的测试用例: // BROKEN public void testDefaultOAuthConsumerAndroidBug() throws Exception { for (int i = 0; i = 0 ) ; // … in combination with this line causes responseCode -1 for i==1 when using api.tripit.com but not mail.google.com assertTrue(c.getResponseCode() > 0); } } 基本上,如果我签署请求然后使用整个输入流,则下一个请求将失败,结果代码为-1。 如果我只是从输入流中读取一个字符,似乎不会发生故障。 请注意,任何url都不会发生这种情况 – 只是特定的url,例如上面的url。 此外,如果我切换到使用HttpClient而不是HttpURLConnection,一切正常: // WORKS public […]

从url下载pdf然后用pdf阅读器打开它

我正在尝试编写一个应用程序从url下载pdf,将它们存储在sd上,然后由adobe pdf reader或其他能够打开pdf的应用程序打开。 直到现在,我已“成功下载并将其存储在Sd卡上”(但每当我尝试使用pdf阅读器打开pdf时,阅读器崩溃并发出意外错误),例如, http://maven.apache。组织/ Maven的1.x中/ maven.pdf 这是我的下载程序的代码: //……..code set ui stuff //……..code set ui stuff new DownloadFile().execute(fileUrl, fileName); private class DownloadFile extends AsyncTask{ @Override protected Void doInBackground(String… strings) { String fileUrl = strings[0]; // -> http://maven.apache.org/maven-1.x/maven.pdf String fileName = strings[1]; // -> maven.pdf String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); File folder = new File(extStorageDirectory, “testthreepdf”); folder.mkdir(); […]

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 […]