首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

不确定为什么我从httpurlconnection得到一个空的输出流

当使用HttpURLConnection时,如果从getOutputStream()方法获取到一个空的输出流,可能有以下几个原因:

  1. 请求方法错误:HttpURLConnection默认使用GET请求方法,如果需要发送数据,应该使用POST或其他适当的请求方法。确保使用正确的请求方法来发送数据。
  2. 忘记调用setDoOutput(true):在使用HttpURLConnection发送POST请求时,需要设置setDoOutput(true)来允许输出数据。如果忘记调用该方法,将无法获取到输出流。
  3. 忘记写入数据:在获取到输出流后,需要将数据写入输出流中。可以使用OutputStreamwrite()方法将数据写入输出流。
  4. 忘记关闭输出流:在写入完数据后,应该调用OutputStreamclose()方法来关闭输出流。如果没有关闭输出流,可能会导致数据无法发送或其他问题。

以下是一个示例代码,演示如何正确地发送POST请求并写入数据:

代码语言:txt
复制
import java.io.*;
import java.net.*;

public class HttpURLConnectionExample {
    public static void main(String[] args) {
        try {
            // 创建URL对象
            URL url = new URL("http://example.com/api");

            // 打开连接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 设置请求方法为POST
            connection.setRequestMethod("POST");

            // 允许输出数据
            connection.setDoOutput(true);

            // 获取输出流
            OutputStream outputStream = connection.getOutputStream();

            // 写入数据
            String data = "Hello, World!";
            outputStream.write(data.getBytes());

            // 关闭输出流
            outputStream.close();

            // 获取响应代码
            int responseCode = connection.getResponseCode();

            // 处理响应
            if (responseCode == HttpURLConnection.HTTP_OK) {
                // 读取响应数据
                InputStream inputStream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                String line;
                StringBuilder response = new StringBuilder();
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();

                // 输出响应数据
                System.out.println(response.toString());
            } else {
                System.out.println("请求失败,响应代码:" + responseCode);
            }

            // 关闭连接
            connection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上述示例中,我们首先创建了一个URL对象,然后使用openConnection()方法打开连接。接下来,我们设置请求方法为POST,并允许输出数据。然后,我们获取输出流并将数据写入输出流中。最后,我们获取响应代码并处理响应数据。

请注意,上述示例仅用于演示如何正确地发送POST请求并写入数据。在实际应用中,可能需要根据具体需求进行适当的修改和处理。

腾讯云相关产品和产品介绍链接地址:

以上是腾讯云的一些相关产品,供参考使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java中使用HttpUrlConnection调用api

请求行,请求头设置必须放在网络连接前。 3, connection.getInputStream()只是得到一个对象,并不是数据,不过我们可以中读出数据,中读取数据操作必须放在子线程。...4, connection.getInputStream()得到一个对象,从这个对象中只能读取一次数据,第二次读取时将会得到数据。...:连接中得到一个输出,通过输出把数据写到服务器。...五,上传文件 在post请求传递参数时知道,可以连接中得到一个输出输出可以像服务器写数据。 同理,可以使用这个输出将文件写到服务器。...七.下载文件 服务器下载文件是比较简单操作,只要得到输入流,就可以中读出数据。

1.6K20

详解HttpURLConnection

这就是为什么HttpURLConneciton只是一个抽象类,自身不能被实例化原因。HttpURLConnection只能通过URL.openConnection()方法创建具体实例。...虽然底层网络连接可以被多个HttpURLConnection实例共享,但每一个HttpURLConnection实例只能发送一个请求。...   HttpURLConnection发送请求 [java] view plain copy // 现在通过输出对象构建对象输出对象,以实现输出可序列化对象。  ...   objOutputStrm.writeObject(new String("是测试数据"));     // 刷新对象输出,将任何字节都写入潜在中(些处为ObjectOutputStream...此时,不能再向对象输出写入任何数据,先前写入数据存在于内存缓冲区中,   // 在调用下边getInputStream()函数时才把准备好http请求正式发送到服务器   objOutputStm.close

2.4K10

Java生成微信小程序二维码,5种实现方式,一个一个简单

对于如何生成微信小程序二维码,本文一共列举了5种实现方式,其中第1、2种是网上常见方式,第3、4、5种封装更为优雅,文末可打包下载开箱即用全套源码,更期待老铁文末 投票 :哪种方式你更喜欢?...---- 先看官网 项目主要用是微信官方提供服务端能力,考虑到涉及secret和token等安全问题,所以架构上设计调用链路为:前端->后端API->微信API。...(true); // 获取URLConnection对象对应输出 PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream...()); // 发送请求参数 printWriter.write(JSONObject.toJSONString(body)); // flush输出缓冲...body.put("env_version", envVersion); // 透明,根据你场景自行设置body参数 body.put("is_hyaline", true); byte[]数组 为什么要先得到

1.9K20

【Java 代码审计入门-04】SSRF 漏洞原理与实际案例介绍

用InputStream()获取字节流 然后InputStreamReader()将字节流转化成字符 BufferedReader()将字符以缓存形式输出方式来快速获取网络数据 最终一行一行输入到...html 变量中,输出到浏览器 代码主要功能即是模拟一个 http 请求,如果没有对请求地址进行限制和过滤,即可以利用来进行 SSRF 攻击。...entity,HttpEntity即为消息体,包含了三种类型:数据方式、自我包含方式以及封装模式(包含上述两种方式),这里就是一个基于HttpEntity, HttpRequest接口实现,类似于上文中...,最终得到请求内容。...另外对于 SSRF 审计可以 http 请求函数入手,这里提供一些审计函数,如下: HttpClient.execute HttpClient.executeMethod HttpURLConnection.connect

1.3K30

Android缓存之DiskLruCache磁盘缓存使用

Editor edit(String key) 通过key可以获得一个DiskLruCache.Editor,通过Editor可以得到一个输出,进而缓存到本地存储上 void flush() 强制缓冲文件保存到文件系统...Snapshot get(String key) 通过key值来获得一个Snapshot,如果Snapshot存在,则移动到LRU队列头部来,通过Snapshot可以得到一个输入流InputStream...= null) { //创建输出 OutputStream outputStream = editor.newOutputStream(...,图片通过该输出写到文件系统, //也就是说,图片下载到了磁盘缓存中。...这里为什么不直接用url作为key而要进行md5加密呢。因为url中,可能存在一些特殊字符,这样一来可能在命名文件时候不合法。 md5加密之后字符是唯一,并且都是0-F字符。

2.4K11

Java调用第三方接口(http总结)

输出,DoInput设置是否httpUrlConnection读入,此外发送post请求必须设置这两个 conn.setDoOutput(true);.../** * 下面的三句代码,就是调用第三方http接口 */ //获取URLConnection对象对应输出...上对资源执行HTTP DELETE操作 exchange() 在URL上执行特定HTTP方法,返回包含对象ResponseEntity,这个对象是响应体中映射得到 execute...() 在URL上执行特定HTTP方法,返回一个响应体映射得到对象 getForEntity() 发送一个HTTP GET请求,返回ResponseEntity包含了响应体所映射成对象...,这个对象是响应体中映射得到 postForObject() POST 数据到一个URL,返回根据响应体匹配形成对象 headForHeaders() 发送HTTP HEAD请求,

1.9K20

Android基于HttpUrlConnection文件下载实例代码

(HttpURLConnection) url.openConnection(); //设置链接超时 connection.setConnectTimeout(4000); //设置允许得到服务器输入流...File file = new File(getFilesDir(), fileName); //创建一个文件输出 FileOutputStream outputStream = new FileOutputStream...(file); //得到链接响应码 200为成功 int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK...= -1) { //每次读取完了都将len累加在totle里 totle += len; //每次读取都更新一次progressBar mPb.setProgress(totle); //通过文件输出写入服务器中读取数据...基于HttpUrlConnection文件下载实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

97720

网络html查看器

()方法,得到HttpUrlConnection对象,这里需要强转 调用HttpUrlConnection对象setRequestMethod()方法 调用HttpUrlConnection对象setConnectTimeout...()方法 调用HttpUrlConnection对象setRequestProperty()方法 调用HttpUrlConnection对象getResponseCode()方法,得到响应码,进行判断...调用HttpUrlConnection对象getInputStream()方法,得到InputStream对象 把数据转换成文本,是一个非常常用操作,新建一个包utils,放工具类 新建一个类...StreamTools,里面定义一个静态方法readInputStream() 获取ByteArrayOutputStream对象,通过new一个字节数组输出 定义一个intlen长度是0 定义一个...方法,读取字节数组,0开始到len长度 循环完成之后,关闭输入流,调用ByteArrayOutputStream对象toByteArray()得到一个字节数组,return出来用new String

1.5K10

终极解决远程预览pdf问题

pdf.js一个基于Html工具类,熟悉pdf.js朋友们很清楚,pdf.js帮助我们做了很多事。尤其金融类网站会产生很多报表。需要在线预览。...pdf.js绝对是我们首选 本地预览 在pdf.js官网上下载demo中我们就可以直接进行预览。官网案列在web文件夹下view.html。这里整理了一个pdf.js精简版。...还有的说请求头修改成跨域但是没说明白。没有实现。最终发小在viewer.html中获取file文件参数原因是需要通过该文件获取文件文件从而获取数据对viewer.html记性渲染。...既然是获取文件为什么一开始不直接传递文件。基于这个想法。开始实现获取远程地址文件。果然让找到了方法。我们先通过httpclient爬虫获取远程文件。...,就可以将该远程文件文件返回给你。

40110

Android网络 | URL和URLConnection详解及其实战案例

getOutputStream():返回该URLConnection对应输出,用于向URLConnection发送请求参数。 getHeaderField:根据响应头字段来返回对应值。...详解 主要分四个功能实现: Internet获取网页 需要先发送请求, 然后将网页以形式读回来: (1)创建一个URL对象: URL url = new URL("http://www.sohu.com..."); (2)利用HttpURLConnection对象网络中获取网页数据: HttpURLConnection conn = (HttpURLConnection) url.openConnection...(); 接着可以用bufferReader读取数据; 详见网络技术基础梳理 Internet获取文件 (1)~(5)同上 (6)写出得到文件: outStream.write(buffer...)); (10)设置文件类型: conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); (11)最后以方式输出

1.6K40

HttpURLConnection调用get方法碰到奇怪编码问题--不同方式调用同一个方法竟然有不同结果

今天在调用某接口查询企业名称时候碰到奇怪问题。 在页面上输入拼音能搜索到数据,输入汉字则不行。 询问了对方技术人员,他说内容是,这就奇怪了,后台明明已经接收到“浙江”这个值了。...它们之间区别仅仅是调用路径不同,一个单元测试调用一个页面上调用。...页面调用 通过页面ajax调用接口: 参数也能正常传到Controller,问题是sendUrl已经在方法里写死了,却得到了不一样结果: /** * 获取公司列表...这是通过单元测试方法发送请求,编码没有问题: 这是通过页面发送请求,编码就有问题了: 不同方式调用同一个方法,为什么会有这样区别呢?真是搞不明白。。。...但是单元测试时候,为什么不编码也可以呢?而页面上通过Controller调用就有编码问题? 这个疑问还没解开。。。 如果有大神知道原因,请不吝赐教,谢谢!

1.4K10
领券