使用 POCO 上传文件 - SSL 连接意外关闭异常

2023-12-15

使用 POCO 将文件上传到 HTTPS url HTTP POST 请求始终返回“SSL 连接意外关闭”异常

下面是我用于文件分段上传的代码。

try
{
  Poco::URI uri(uploadLink);
  const Poco::Net::Context::Ptr context = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "", Poco::Net::Context::VERIFY_NONE, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
    Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), context);
    session.setKeepAlive(true);

  // prepare path
    std::string path(uri.getPathAndQuery());
   if (path.empty())
   {
        path = "/";
   }
  std::cout<<"\nPath: "<<path;


  std::ifstream f1 (filePath,std::fstream::binary);
std::string content((std::istreambuf_iterator<char>(f1)), std::istreambuf_iterator<char>());

std::cout<<"\n Fle Content: "<<content;

std::string boundary = "-------------------------87142694621188";
std::string data1("---------------------------87142694621188\r\nContent-Disposition: form-data; name=\"data\"; filename=\"");
std::string data2(filePath);
std::string data3("\";\r\nContent-Type: application/octet-stream\r\n\r\n"); 
std::string data4("\r\n---------------------------87142694621188--\r\n");

std::string reqBody = data1 +data2 +data3 + content + data4;
std::cout<<"\nReq Body: "<<reqBody.c_str();
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_POST, path,   Poco::Net::HTTPMessage::HTTP_1_1);
req.setKeepAlive(true);
req.setContentType("multipart/form-data; boundary=-------------------------87142694621188");
req.setContentLength(reqBody.length());

    // sends request, returns open stream
    std::ostream& myOStream = session.sendRequest(req);
    // sends the body
    myOStream << reqBody;

    Poco::Net::HTTPResponse res;

    // get the response body from server
    std::istream& inStream = session.receiveResponse(res);
    std::ostringstream outStringStream;
    outStringStream << inStream.rdbuf();
    std::cout<< outStringStream.str();

}
catch (Poco::Exception& e)
{
   std::cout <<"Upload Exception: "<< e.displayText() << std::endl;
}

我也尝试过使用 Html 表单:

Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, path,      Poco::Net::HTTPMessage::HTTP_1_1);
request.setKeepAlive(true);

 request.setContentLength(1041);
Poco::Net::HTMLForm form;
form.setEncoding(Poco::Net::HTMLForm::ENCODING_MULTIPART);

form.addPart("file", new Poco::Net::FilePartSource(filePath));
form.prepareSubmit(request);

session.setTimeout(Poco::Timespan(20, 0));

form.write(session.sendRequest(request));        

Poco::Net::HTTPResponse res;
std::istream &is = session.receiveResponse(res);
Poco::StreamCopier::copyStream(is, std::cout);
  std::cerr << is.rdbuf();

但两种方法都会返回相同的错误。 通过其他平台上传是有效的,所以我可以说这不是服务器问题,但问题出在上面的代码中。请帮我解决这个问题。 注意:服务器不支持分块传输。服务器端错误日志显示“传输编码错误:分块”。虽然我没有进行分块传输。

Update:

我终于能够使用第一个代码上传文件(通过设置边界),但是当我尝试使用以下方法从流中读取响应正文时,我正在谈论的异常(SSL 连接意外关闭)出现了:

outStringStream

服务器正在返回纯文本。我怎样才能得到那个?


我可以通过逐个字符读取响应正文来处理异常。以下是使用 POCO 上传文件的完整代码。

http://developersarea.wordpress.com/2014/10/08/upload-files-using-poco-c-libraries/

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

使用 POCO 上传文件 - SSL 连接意外关闭异常 的相关文章

  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 将 Excel 导入到 Datagridview

    我使用此代码打开 Excel 文件并将其保存在 DataGridView 中 string name Items string constr Provider Microsoft Jet OLEDB 4 0 Data Source Dial
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • Visual Studio 中的测试单独成功,但一组失败

    当我在 Visual Studio 中单独运行测试时 它们都顺利通过 然而 当我同时运行所有这些时 有些通过 有些失败 我尝试在每个测试方法之间暂停 1 秒 但没有成功 有任何想法吗 在此先感谢您的帮助 你们可能有一些共享数据 检查正在使用
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the

随机推荐

  • 如何获取 CSV 文件的行数?

    fieldnames first name last name address with open names csv as csvfile reader csv DictReader csvfile fieldnames fieldnam
  • 如何以编程方式调用键盘按键?

    Problem 从一段 C 代码中调用要按下的键盘按键 但这里有一个问题 按键不应仅限于进程 应用程序 但由整个操作系统接收 当程序位于后台并且不同的表单 程序具有焦点时也是如此 Goal make a program that locks
  • java中合并两个已排序的数组

    我知道有人问过类似的问题并且我已经研究过 许多网站 我尝试使用一些答案 但我的代码是 还是行不通 我正在完成之前的作业以帮助积累知识 爪哇 请原谅我的代码中的任何错误 我仍在学习中 爪哇 这是我的问题 实现一个 merge 方法 给定两个已
  • VBScript、GetLocale、SetLocale - 其他用途

    注意 与断言相反 这个问题is not重复的 我的问题被标记为 ms word 并且提出的建议指向 ms excel 答案 在本例中该答案不适用 Word VBA Excel VBA 我需要让德国的用户生成英语 Word 2016 文档 但
  • 为什么简单的 JavaScript 代码无法运行?

    为什么简单的 JavaScript 代码无法运行 a href click me a 加载文档后分配您的 onclick 处理程序
  • EhCache Hibernate 二级缓存 maxBytesLocalHeap 慢

    我在 Spring 驱动的应用程序中使用 Hibernate 4 2 15 Final 和 EhCache 2 6 9 作为二级缓存 有一个非常标准的持久层设置 一切都按预期进行 然而 将条目放入二级缓存有时需要很长时间 我已经以显式方式配
  • 对列表列表求和[重复]

    这个问题在这里已经有答案了 我在 Python 3 6 中发现了一件奇怪的事情 以下代码返回 类型错误 不支持的操作数类型 int 和 list arr 1 2 3 4 5 print sum i for i in arr 为什么会发生这种
  • 如何使用同位素和砌体布局来避免间隙[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 如何修复因元素滑动到下一行而造成的间隙 如下图所示 我正在使用同位素和砖石布局模式 谢谢 我有一个类似的问题 我将通过预先计算元素的顺序来 修复 这个问题 这样就不会有空格 并且框将
  • Detectron2 - 在目标检测的阈值处提取区域特征

    我正在尝试使用以下方法提取类别检测高于某个阈值的区域特征探测器2框架 我稍后将在我的管道中使用这些功能 类似于 VilBert第 3 1 节训练 ViLBERT 到目前为止 我已经用这个训练了 Mask R CNNconfig并根据一些自定
  • 在 Java 绑定中循环遍历 OpenCV Mat

    我正在尝试将 C 方法从之前的回答我收到使用 OpenCV 到 Java 使用 OpenCV Java 绑定 C 代码 cv Mat gray cv Mat element cv getStructuringElement cv MORPH
  • 如何为sql server配置hibernate配置文件

    这是 MySQL 的配置文件
  • Android使用Loader的联系电话号码无效的列数据1

    我以前曾经使用内容解析器来获取联系人列表及其详细信息 虽然它仍然有效 但我想尝试在后台查询内容提供程序的加载器方法 我在这里查看了文档和示例代码 http developer android com training contacts pr
  • Matlab:如何在没有Tab的情况下激活自动完成?

    From 如何在 MATLAB 编辑器中启用自动单词完成功能 我知道我们可以按 Tab 来要求自动完成 然而 这有点乏味 在像 ruby mine 这样的 IDE 中 不需要要求自动完成 建议会自动跳出来 这适用于移动设备 http www
  • 无法运行模拟器

    我已经有一段时间没有编码了 所以我启动了 Eclipse 更新了插件和 Eclipse 现在当我尝试启动模拟器时出现异常 Exception in thread AWT EventQueue 0 java lang VerifyError
  • Xcode 机器人安装链接请求超时

    I have been able to get my Xcode bot to integrate successfully and create a ipa file I have an ssl certificate installed
  • 在Python中将不同大小的列表写入列中的csv

    我需要将长度不同的列表写入列中的 CSV 文件 我目前有 d lists writer csv writer fl for values in zip d writer writerow values 这只有效 我怀疑正在发生的事情是它停止
  • 从构建中排除包,但不从 Netbeans 8 的视图中排除包?

    如何从构建过程中排除特定的包 例如 com domain various 以便它不会出现在最终的 jar 文件中 我已经尝试过以下方式 右键单击项目 gt 项目属性 在树中选择 来源 单击 包括 排除 gt 添加排除模式 但这也隐藏了 Ne
  • 我们如何从 PHP 将指数格式转换为实际数字

    我们如何转换8 64E 14转化为 PHP 的实际值 如果还不是浮动体 则转换为浮动体 并且printf 结果 printf 0f float 8 64E 14 请注意 转换为 int 不起作用 因为该转换无法理解以科学记数法表示为字符串的
  • 在android中使用freemarker库

    我正在尝试在我的项目中使用 freemarker 库 但在初始化配置对象时遇到错误 我进一步调查了这个问题 我发现this关联 我尝试应用上面链接中给出的补丁 但无法成功应用 有人在 Android 中使用过 Freemarker 吗 请帮
  • 使用 POCO 上传文件 - SSL 连接意外关闭异常

    使用 POCO 将文件上传到 HTTPS url HTTP POST 请求始终返回 SSL 连接意外关闭 异常 下面是我用于文件分段上传的代码 try Poco URI uri uploadLink const Poco Net Conte