Articles of httpurlconnection

使用HttpURLConnection使用其他表单数据发布文件

我试图将文件与其他参数一起发布到我的API。 例如。 POST /带参数的媒体 filename =’test.png’ file = -the-actual-file- 我可以使用Postman成功完成此操作(使用表单数据),因此事情的api方面很好。 这是我使用HttpURLConnection的android代码: nameValuePairs.add(new BasicNameValuePair(“filename”, “test.png”)); URL object = new URL(url); HttpURLConnection connection = (HttpURLConnection) object.openConnection(); connection.setReadTimeout(60 * 1000); connection.setConnectTimeout(60 * 1000); String auth = username+”:”+password; byte[] data = auth.getBytes(); String encodeAuth = “Basic ” + Base64.encodeToString(data, Base64.DEFAULT); connection.setDoInput(true); connection.setDoOutput(true); connection.setUseCaches(false); connection.setRequestProperty(“Authorization”, encodeAuth); connection.setRequestProperty(“Accept”, ACCEPT); connection.setRequestMethod(“POST”); connection.setRequestProperty(“ENCTYPE”, […]

HttpURLConnection抛出exception

这是我连接HTTP代码。 URL url = new URL(“http://www.google.com”); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setDoOutput(true); String responseMsg = con.getResponseMessage(); int response = con.getResponseCode(); 这是抛出android.os.NetworkOnMainThreadException 请帮忙。

CONNECT的意外响应代码:400

我的一些用户在尝试连接时会遇到很多这样的exception。 java.io.IOException: Unexpected response code for CONNECT: 400 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeTunnel(HttpsURLConnectionImpl.java:509) at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:463) at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:442) at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81) at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165) 400表示不良请求,但几秒钟后相同的请求成功。 我仔细检查了请求,并没有任何问题。 我也检查了服务器日志,看来请求甚至没有到达我们的服务器。 我正在使用简单的HttpUrlConnection进行连接。 URL connectURL = new URL(url); HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setInstanceFollowRedirects(true); conn.setReadTimeout(30000); conn.setConnectTimeout(15000); conn.setRequestMethod(“POST”); connection.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded”); connection.setRequestProperty(“Accept-Encoding”, “deflate, gzip”); connection.setRequestProperty(“Content-Length”, postParameters.length() + “”); conn.connect(); OutputStreamWriter writer […]

Android:HttpURLConnection不会断开连接

通过在服务器上运行netstat : 直到几天 :我可以看到连接只ESTABLISHED了大约一秒钟,然后它会从列表中消失 现在 :它保持ESTABLISHED大约10秒钟,然后进入FIN_WAIT1和FIN_WAIT2 Android代码是一样的,服务器仍然是一样的 某种Android更新可能会改变一些事情吗? 我无法解释它。 我报告下面的代码。 urlConnection.disconnect()被执行,但连接仍然在服务器上建立。 HttpURLConnection urlConnection = null; System.setProperty(“http.keepAlive”, “false”); try { URL url = new URL(stringUrl); urlConnection = (HttpURLConnection) url.openConnection(); InputStream instream = new BufferedInputStream(urlConnection.getInputStream()); … instream.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (urlConnection!=null) { urlConnection.disconnect(); } […]

防止来自HttpURLConnection的未经请求的CONNECT方法调用

我正在使用HttpURLConnection沿着以下几行: String strURL = “https://example.herokuapp.com”; Bitmap bmImage = null; HttpURLConnection connection = null; InputStream in = null; showMessage(context.getString(R.string.message_preparing)); try { int timeoutMS = 15000; URL url = new URL(strURL); connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.setConnectTimeout(timeoutMS); connection.setReadTimeout(timeoutMS); connection.connect(); in = connection.getInputStream(); BitmapFactory.Options options = new BitmapFactory.Options(); bmImage = BitmapFactory.decodeStream(in, null, options); } catch (Exception e) { […]

J2ME上的httpconnection和Android上的HttpUrlConnection有什么区别(http error 401)

我在我的应用程序上连接到两台服务器(PROD是https,测试服务器是http)。 在J2ME上:我可以毫无问题地连接到这两台服务器。 在Android上我无法连接到测试服务器。 当连接是http时,如果我不使用setChunkedStreamingMode ,我就无法获得responseCode(StringIndexOutOfBoundsException); 如果我使用setChunkedStreamingMode ,响应代码是401 。 我该怎么办,我的错在哪里? 这是我的android代码,如果你想看J2me代码,我也可以添加它。 URL url = new URL(getUrl()); URLConnection conn = url.openConnection(); HttpURLConnection httpConn = (HttpURLConnection) conn; httpConn.setAllowUserInteraction(false); httpConn.setInstanceFollowRedirects(true); httpConn.setConnectTimeout(10000); httpConn.setRequestProperty(“User-Agent”, util.getDeviceFullModel() + ” ” + util.getSoftwareVersion()); httpConn.setRequestProperty(“Accept-Charset”, “utf-8”); httpConn.setRequestProperty(“Content-Type”, “text/xml; charset=utf-8”); httpConn.setRequestProperty(“SOAPAction”, “http://tempuri.org/IAuthenticationServiceForGroup/”+conTypeString); httpConn.setRequestProperty(“Software-Version”, AppData.VERSION); httpConn.setChunkedStreamingMode(getParams().getBytes(“UTF8”).length); httpConn.setRequestMethod(“POST”); httpConn.setDoOutput(true); httpConn.setDoInput(true); httpConn.connect(); os = httpConn.getOutputStream(); os.write(getParams().getBytes(“UTF8”)); try { os.close(); […]

Java HttpURLConnection VS Android HttpURLConnection

我有这个在Windows VM上运行的简单代码: URL url = new URL(“http:xxx.xxx.xxx.xxx/api/cities.json”); HttpURLConnection connexion = (HttpURLConnection) url.openConnection(); connexion.setRequestMethod(“GET”); System.out.println(“response ” + connexion.getResponseCode()); connexion.connect(); InputStream is = connexion.getInputStream(); for (String header : connexion.getHeaderFields().keySet()) { System.out.println(header + “:” + connexion.getHeaderField(header)); } 给这些标题 response 200 null:HTTP/1.1 200 OK X-Frame-Options:SAMEORIGIN Access-Control-Allow-Origin:* Vary:Accept-Encoding Date:Sun, 23 Mar 2014 03:00:06 GMT Content-Length:1894 Connection:keep-alive Content-Type:application/json Server:nginx Android上的完全相同的代码提供了这些标题 03-22 […]

使用progressBar上传HttpUrlConnection多部分文件

我想通过HttpUrlConnection检查上传文件的HttpUrlConnection 。 我怎么能这样做? 我在OutputStream写入数据时尝试计算字节数,但这是错误的,因为只有当我调用conn.getInputStream()时才会发生真正的上传,所以我需要以某种方式检查inputStream。 这是我的代码: public static void uploadMovie(final HashMap dataSource, final OnLoadFinishedListener finishedListener, final ProgressListener progressListener) { if (finishedListener != null) { new Thread(new Runnable() { public void run() { try { String boundary = getMD5(dataSource.size()+String.valueOf(System.currentTimeMillis())); MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create(); multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntity.setCharset(Charset.forName(“UTF-8”)); for (String key : dataSource.keySet()) { if (key.equals(MoviesFragmentAdd.USERFILE)) { FileBody userFile = […]

HttpsURLConnection和间歇性连接

我希望有人可以通过间歇性连接来帮助我使用HttpsURLConnection的代码。 我正在使用的代码如下: HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setReadTimeout(10 * 1000); if conn.getResponseCode() != 200) { Log.v(TAG, “error code:” + conn.getResponseCode()); } 每次我使用它来拉取json文件时,连接都会第一次运行。 但是,当我再次使用连接发送命令时,它总是第一次失败。 如果我快速发送命令(在5秒内),它通常会起作用,但如果我等待一段时间则失败。 我不认为这是一个SSL问题,因为它第一次正确连接,但我可能在这里错了。 我还尝试了许多不同的变体,例如添加: conn.setUseCaches(false); conn.setRequestProperty(“Connection”,”Keep-Alive”); conn.getHostnameVerifier(); conn.getSSLSocketFactory(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod(“POST”); conn.wait(100); 但是,我没有运气。 任何帮助将不胜感激。

org.apache.http.entity.FileEntity在Android 6(Marshmallow)中已弃用

我正在将应用程序升级到API 23,其中不推荐使用org.apache.http 。 我当前(已弃用)的代码如下所示: HttpClient httpClient = new DefaultHttpClient(); File file = new File(attr.Value); String url = server_url; HttpPost request = new HttpPost(url); FileEntity fileEntity = new FileEntity(file, “image/png”); request.setEntity(fileEntity); HttpResponse response = httpClient.execute(request); String output = getContent(response.getEntity().getContent()); 我已经find了一些关于如何使用HttpURLConnection进行此操作的建议,但它们比当前的解决方案(不能再使用)复杂得多。 我正在谈论用于执行与上述相同function的许多代码行。 示例包括: 此页面和此页面 有没有人有一个很好的固定更短的解决方案呢?