Articles of httpurlconnection

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

Android允许多个文件上传(最大150 MB)到PHP Server

我必须允许用户在我的Android应用程序到PHP服务器的单个请求中上传多个文件(可以是图像/video/音频)。 我正在使用REST Web服务。 对于此function,我使用以下代码: /* To upload the multiple documents */ public void uploadFile() { String charset = “UTF-8”; File[] uploadFileArray = new File[mediaList.size()]; for (int i = 0; i < mediaList.size(); i++) { uploadFileArray[i] = new File(mediaList.get(i).getMediaPath()); } try { MultipartUtility multipart = new MultipartUtility(upLoadServerUri, charset); for (int i = 0; i < mediaList.size(); […]

如何在没有使用android中的try / catch处理它的情况下获得401响应

我正在使用HttpUrlConnection从我的Android应用程序发出网络请求。 一切正常,除了一件事,401。每当服务器返回状态代码为401的响应时,我的应用程序抛出IOException并显示一条消息,指出”no authentication challenge found” 。 谷歌搜索后,我没有find一个解决方案,但只有解决方法(使用try / catch处理它,假设它的401响应)。 这是代码片段: public Bundle request(String action, Bundle params, String cookie) throws FileNotFoundException, MalformedURLException, SocketTimeoutException, IOException { OutputStream os; String url = baseUrl + action; Log.d(TAG, url); HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); conn.setConnectTimeout(30 * 1000); conn.setReadTimeout(30 * 1000); conn.setRequestProperty(“User-Agent”, System.getProperties().getProperty(“http.agent”) + “AndroidNative”); conn.setRequestMethod(“POST”); conn.setRequestProperty(“Content-Type”, “multipart/form-data;boundary=” + boundary); […]

Android HttpURLConnection抛出EOFException

这是最简单的问题。 我使用HttpUrlConnection对象通过代理创建到我的服务器的HTTPS连接。 我的代理关闭连接,但我的代码仍尝试重用相同的连接。 所以我得到了EOFException。 我该如何处理这类案件?

使用HTTPUrlConnection时如何保留cookie?

我已经开始使用推荐的HTTPUrlConnection并远离DefaultHTTPClient 。 我无法粘合在一起的一件事是使用持久性cookie存储。 我想简单地将自定义cookie处理程序/管理器附加到我的连接以存储cookie。 Android文档并没有太大帮助,因为它包含了两行关于cookie的主题。 我之前一直在使用LoopJ的PersistentCookieStore并且工作得非常好。 有关如何在Android中设置持久性cookie存储的任何想法,我可以附加到我自动保存和检索cookie的HTTPUrlConnection吗? 谢谢

Android的HttpURLConnection在HEAD请求上抛出EOFException

这个小代码片段可以在Mac的JVM上正常运行。 不幸的是,它在Android 4.2上执行时崩溃了。 import java.net.HttpURLConnection; import java.net.URL; public class App { public static void main( String… arguments ) throws Exception { HttpURLConnection connection = (HttpURLConnection) new URL( “https://github.com” ).openConnection(); connection.setRequestMethod( “HEAD” ); System.out.println( connection.getResponseCode() + “” ); } } 如果我用https://github.com替换https://github.com ,它可以正常工作,但我没有弄明白为什么。 该例外不包含消息; 所以这里至少是堆栈跟踪。 java.io.EOFException at java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:206) at java.util.zip.GZIPInputStream.(GZIPInputStream.java:98) at java.util.zip.GZIPInputStream.(GZIPInputStream.java:81) at libcore.net.http.HttpEngine.initContentStream(HttpEngine.java:541) at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:844) at […]

Android中的HttpUrlConnection设置范围将被忽略

我正在尝试使用Android从我的服务器获得206响应。 这是代码。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); new AsyncTask() { @Override protected Void doInBackground(Void… params) { try { URL url = new URL(“http://aviddapp.com/10mb.file”); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestProperty(“Range”, “bytes=1-2”); urlConnection.connect(); System.out.println(“Response Code: ” + urlConnection.getResponseCode()); System.out.println(“Content-Length: ” + urlConnection.getContentLength()); Map<String, List> map = urlConnection.getHeaderFields(); for (Map.Entry<String, List> entry : map.entrySet()) { […]

java.net.SocketTimeoutException:timeout

使用OkHttp库,应用程序面临以下SocketTimeoutException问题。 如果请求大小较小,那么它工作正常(小于1MB)。 我在10秒内收到此exception,即使我的套接字超时( readTimeout )值更高。 它始终无法满足请求(大小为1.8MB)。 当我用HttpUrlConnection执行请求时它工作正常。 什么可能是失败的原因? 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: java.net.SocketTimeoutException: timeout 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.Okio$3.newTimeoutException(Okio.java:207) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.AsyncTimeout.exit(AsyncTimeout.java:261) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.AsyncTimeout$1.write(AsyncTimeout.java:158) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okio.RealBufferedSink.write(RealBufferedSink.java:46) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at okhttp3.internal.http.Http1xStream$FixedLengthSink.write(Http1xStream.java:286) 03-29 12:16:38.997 32066-4018/com.mobile W/System.err: at […]

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