HttpURLConnection POST,conn.getOutputStream() 抛出异常

2023-11-30

我想使用 HttpURLConnection 进行 POST。 我正在以两种方式尝试这一点,但在执行时我总是会遇到异常:conn.getOutputStream();

我在这两种情况下得到的例外是:

java.net.SocketException:操作超时:连接:可能是由于 无效地址

功能1:

public void makePost(String title, String comment, File file) {
    try {
        URL servlet = new URL("http://" + "www.server.com/daten/web/test/testupload.nsf/upload?CreateDocument");            
        HttpURLConnection conn=(HttpURLConnection)servlet.openConnection();
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setUseCaches(false);
        String boundary = "---------------------------7d226f700d0";
        conn.setRequestProperty("Content-type","multipart/form-data; boundary=" + boundary);
        //conn.setRequestProperty("Referer", "http://127.0.0.1/index.jsp");
        conn.setRequestProperty("Cache-Control", "no-cache");

        OutputStream os = conn.getOutputStream(); //exception throws here!
        DataOutputStream out = new DataOutputStream(os);
        out.writeBytes("--" + boundary + "\r\n");
        writeParam(INPUT_TITLE, title, out, boundary);
        writeParam(INPUT_COMMENT, comment, out, boundary);
        writeFile(INPUT_FILE, file.getName(), out, boundary);
        out.flush();
        out.close();

        InputStream stream = conn.getInputStream();
        BufferedInputStream in = new BufferedInputStream(stream);
        int i = 0;            
        while ((i = in.read()) != -1) {
            System.out.write(i);            
        }            
        in.close();
    } catch (Exception e) {  
        e.printStackTrace();
    }
}

或函数2:

public void makePost2(String title, String comment, File file) {

    File binaryFile = file;
    String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value.

    URLConnection connection = null;
    try {
        connection = new URL("http://" + "www.server.com/daten/web/test/testupload.nsf/upload?CreateDocument").openConnection();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
    PrintWriter writer = null;
    try {
        OutputStream output = connection.getOutputStream(); //exception throws here
        writer = new PrintWriter(new OutputStreamWriter(output, CHARSET), true); // true = autoFlush, important!

        // Send normal param.
        writer.println("--" + boundary);
        writer.println("Content-Disposition: form-data; name=\""+ INPUT_TITLE +"\"");
        writer.println("Content-Type: text/plain; charset=" + CHARSET);
        writer.println();
        writer.println(title);

//        Send binary file.
        writer.println("--" + boundary);
        writer.println("Content-Disposition: form-data; name=\""+ INPUT_FILE +"\"; filename=\"" + binaryFile.getName() + "\"");
        writer.println("Content-Type: " + URLConnection.guessContentTypeFromName(binaryFile.getName()));
        writer.println("Content-Transfer-Encoding: binary");
        writer.println();
        InputStream input = null;
        try {
            input = new FileInputStream(binaryFile);
            byte[] buffer = new byte[1024];
            for (int length = 0; (length = input.read(buffer)) > 0;) {
                output.write(buffer, 0, length);
            }
            output.flush(); // Important! Output cannot be closed. Close of writer will close output as well.
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
        }
        writer.println(); // Important! Indicates end of binary boundary.

        // End of multipart/form-data.
        writer.println("--" + boundary + "--");
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (writer != null) writer.close();
    }


}

该 URL 根本无法访问。 URL 错误,或者 DNS 服务器无法解析主机名。尝试使用众所周知的 URL 进行简单连接以排除其中一个或另一个,例如

InputStream response = new URL("http://stackoverflow.com").openStream();
// Consume response.

Update根据评论,您需要使用代理服务器进行 HTTP 连接。您还需要在 Java 端进行配置。添加以下行before任何连接到 URL 的尝试。

System.setProperty("http.proxyHost", "proxy.example.com");
System.setProperty("http.proxyPort", "8080");

在运行时只执行一次就足够了。

也可以看看:

  • Java 指南 - 网络和代理
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpURLConnection POST,conn.getOutputStream() 抛出异常 的相关文章

  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 浏览器显示 clojure 环中不存在 access-control-allow-origin 标头

    我通过客户端浏览器向服务器发出请求 如下所示https example com bar https example com bar 但出现错误 Access to XMLHttpRequest at https example com ba
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 使用相对路径复制文件

    我想将某种类型的所有文件从某个子目录及其相对路径从该子目录复制到另一个目录 并且相对路径保持不变 例如 源子目录 c temp sourcedirectory 源文件 c temp sourcedirectory tonymontana f
  • “尝试附加自动命名数据库”错误

    我正在 Windows XP SP2 Professional 上使用 C Visual Studio 2010 制作桌面应用程序 如果我直接从发布的文件夹运行该应用程序而不运行安装程序或从调试文件夹运行它或只是调试该应用程序 它不会给出此
  • 使用 json 数据异步填充 AngularJS ngTable

    我正在尝试构建一个 AngularJS 应用程序 它输出一个用 json 填充的 HTML 表 该 表的 HTML 位于这个问题的底部 我在用着application json我从服务器检索的数据 当我做一个简单的curl http myu
  • 创建ipa以分发给客户端

    我想知道当我们可以轻松地压缩构建的应用程序并分发压缩的 app 文件时 创建 ipa 并将其分发给客户端进行测试有什么用 创建有什么好处 ipa 是不是创造了ipa不需要移动配置文件 请澄清我的疑问 我会告诉你我的经验的一个优点 当您向客户
  • 如何自定义 JSONSchema 的错误消息?

    有没有办法根据给定的条件提供自定义错误消息 我在用着https github com networknt json schema validator 版本1 0 43 这是我的 JSON 架构 id https configurations
  • 异常过滤器之外的异常处理?

    使用 Asp net WebApi RC 如何捕获未捕获的错误异常过滤器 or Application Error 在全局 asax 中 有了这两个条件 似乎还有一类例外情况尚未涵盖 例如 ApiControllerActionSelect
  • 如何将 1970 年以来的秒数转换为 C++ 中的 DateTime?

    如何将 1970 年以来的秒数转换为 C 中的 DateTime 我得到的时间格式如下 1296575549 573352 冒号的左侧部分以秒为单位 右侧部分以微秒为单位 请帮忙 Thanks Syd 尝试使用 gmtime 参见http
  • hcmap 与 R Shiny 中的本地文件 javascript

    我正在shiny ui和服务器 上开发一个应用程序 我想用Highchart包的hcmap函数实现一个地图 但是 在实现地图时 我发现函数 hcmap 与站点存在依赖关系 https code highcharts com mapdata
  • 动态方法调度

    网上有很多关于动态调度的信息 我感觉自己像个胆小鬼 因为我无法实现它 请帮我 这就是我正在尝试做的事情 ClassA public void createReq public String postReq ClassB Test publi
  • 将动态参数传递给 SQL Server 2008 中的存储过程

    我有这个过程执行另一个由参数及其参数传递的过程datefrom and dateto CREATE procedure dbo execute proc procs varchar 200 pdatefrom date pdateto da
  • 启用 Google API OAuth 范围

    对于使用 Google Apps 脚本创建的应用程序之一 会在我的应用程序中自动添加一些范围 如下所示 https www googleapis com auth drive https www googleapis com auth sc
  • master和reduce之间共享数据

    我需要使用所有reduce 任务的结果执行聚合 基本上 reduce 任务会找到总和 计数以及一个值 我需要将所有总和和计数相加并找到最终平均值 我尝试使用conf setInt在减少 但是当我尝试从主函数访问它时它失败了 class Ma
  • 3D线平面相交,与简单平面

    我在 3D 空间中有两个点 它们的 X 坐标具有不同的符号 所以其中一个肯定位于 X 平面的一侧 另一个位于 X 平面的另一侧 现在我想以最简单和优化的方式找到该平面与两点组成的线的交点 我知道如何进行一般线平面相交 但由于在这种情况下平面
  • python中的OpenCV透视变换

    我正在尝试用 python 校正图像 我有一个单应性 H 来自绕 x y 和 z 轴旋转的旋转矩阵 如下所示 9 95671447e 01 7 83610423e 02 7 47993630e 02 7 69292630e 02 9 965
  • QSqlQuery 准备好的语句 - 正确使用

    我正在尝试确定将准备好的语句与 QSqlQuery 一起使用的正确方法 这些文档对于这个主题不是很具体 void select const QSqlDatabase database QSqlQuery query database que
  • 如何使用 Golem Shiny 应用程序将 4 个盒子排成一排?

    我正在尝试将每行 4 个盒子放入我闪亮的应用程序中 BioTuring 和 Scope 我希望与 FLAT 和 GTEx 对齐在同一行 现在看起来是这样的 需要注意的是 这个应用程序是用 golem 结构完成的 因此 请在帮助时牢记并遵循我
  • 从 .mexglx 到 .mex

    我得到了一个使用外部 C 函数的 Matlab 程序 我只有这个外部函数的编译版本 扩展名是 mexglx 从我已经红色的来看 这个扩展似乎是用linux编译的mex文件版本 我在 Windows XP 下运行 matlab 我的问题是我的
  • 如何通过 NPM 脚本使用 Windows 控制台“设置”变量?

    这在 Windows 控制台中按预期工作 set A qwerty echo A 输出 qwerty 但是当我尝试在 NPM 脚本中运行相同的命令时 包 json scripts qwerty set A qwerty echo A gt
  • 使用 JavaScript 自动填写表单

    这是我的代码 function setActualDate var d1 new Date var y d1 getFullYear var d d1 getDate var m1 d1 getMonth 1 var m2 d1 getMo
  • HttpURLConnection POST,conn.getOutputStream() 抛出异常

    我想使用 HttpURLConnection 进行 POST 我正在以两种方式尝试这一点 但在执行时我总是会遇到异常 conn getOutputStream 我在这两种情况下得到的例外是 java net SocketException