标签: poco-libraries

boost :: asio相当于Poco :: Net吗?

我是一个boost用作c ++库的项目的一部分.现在我们要使用SMTP/POP3/SSL/HTTP/HTTPS.我在中检测到了几个拟合类和函数Poco::Net

  • 波科::网:: POP3ClientSession
  • 波科::净MAILMESSAGE ::
  • 波科::网:: SMTPClientSession
  • 波科::网:: HTTPSClientSession
  • 波科::网::的HTTPRequest

我找不到任何相同的东西boost::asio.在我做出最终决定之前,我想询问社区,如果我是对的,或者是否有类似的东西boost......

boost-asio poco-libraries

4
推荐指数
1
解决办法
3085
查看次数

停止Poco :: Thread进行单元测试

问题

我有一个UDPlistener应用程序,我需要编写单元测试.此侦听器持续侦听端口,并且始终在产品上运行.我们将poco库用于不在标准库中的框架.

现在我需要将它添加到单元测试应用程序中.

Curent解决方案

我认为Poco::RunnableRunApp运行应用程序的类中实现它是最容易的.然后我可以Poco::Thread在我的单元测试中创建一个新的来运行RunApp该类.

这有效; 我的监听器正在运行,我可以在生成线程后在单元测试体中发送测试消息.但是,我需要停止监听器,以便其他单元测试可以运行.我添加了一条UDP消息,告诉监听器自杀,但这仅用于单元测试和潜在的安全问题.

有没有办法强制Poco::Thread停止?或者我构建这个单元测试错了?我不希望监听器在所有其他单元测试期间运行.

c++ unit-testing poco-libraries

3
推荐指数
1
解决办法
3976
查看次数

对于学习曲线和初学者的适合性(HTTP客户端),提升vs POCO

你建议我使用哪个图书馆?我不知道这些库中的任何一个.我听说,经常使用Boost,但也难以编码.

所以尽可能使这个问题成为客观:只是从初学者程序员的角度来看(我在生活中用C++编写了~1000 LOC)哪个库会更好学习?

我将主要用于HTTP客户端.

c++ boost poco-libraries

3
推荐指数
1
解决办法
2133
查看次数

如何使用POCO使用HTTP基本身份验证创建HTTP Post?

我正在尝试使用POCO制作带有HTTP基本身份验证的HTTP帖子(明文用户名和密码).我找到了一个Get的例子,并尝试修改它,但作为一个新手,我想我已经把它毁了它的用处.有人知道怎么做吗?

是的,我已经看到了另一个问题:POCO C++ - NET SSL - 如何发布HTTPS请求,但我无法理解它是如何尝试实现用户名和密码部分的.我也不明白"x-www-form-urlencoded"的用法.邮政需要这个吗?我没有表格.只想用用户名和密码参数POST到服务器.

passwords post http basic-authentication poco-libraries

3
推荐指数
1
解决办法
1万
查看次数

Poco c ++ Net:Http从响应中获取头文件

我使用POCO C++ Net库作为http

我想尝试为持久缓存制定策略.

首先,我想我需要从缓存标题中过期并使用缓存值进行交叉检查(请告诉我,如果我错了).

那么如何从中提取缓存头httpResponse

我已经看到你可以用Java(getFirstHeader())执行此操作,但是如何在POCO C++中执行此操作?

以下是使用POCO的普通http GET请求:

try
{
    // prepare session
    URI uri("http://www.google.se");
    HTTPClientSession session(uri.getHost(), uri.getPort());

    // prepare path
    string path(uri.getPathAndQuery());
    if (path.empty()) path = "/";

    // send request
    printnet(path.c_str());
    HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1);
    session.sendRequest(req);

    // get response
    printnet("Get response");

    HTTPResponse res;
    cout << res.getStatus() << " " << res.getReason() << endl;

    // print response
    istream &is = session.receiveResponse(res);
    StreamCopier::copyStream(is, cout);
}
catch (Exception &ex)
{
    printnet(ex.displayText().c_str());
    return -1;
}
return 0;
Run Code Online (Sandbox Code Playgroud)

c++ http http-caching poco-libraries

3
推荐指数
2
解决办法
4196
查看次数

Poco C++与conan依赖管理器链接问题,我该如何解决?

我一直在尝试在我的编程项目中使用Poco库,但我得到链接错误.我的C++文件在main函数中只有一行代码,应该可以正常编译.

我的C++文件:

/**
 * Created by kkprince on 27/06/16.
 */

#include <Poco/AutoPtr.h>
#include <Poco/Util/IniFileConfiguration.h>

using Poco::AutoPtr;
using Poco::Util::IniFileConfiguration;

int main(int argc, char* argv[]){
    AutoPtr<IniFileConfiguration> pConf(new IniFileConfiguration("invalid"));
}
Run Code Online (Sandbox Code Playgroud)

我的CMakeLists:

cmake_minimum_required(VERSION 3.5)
project(village.io-server CXX)

include(conanbuildinfo.cmake)
conan_basic_setup()

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/home/kkprince/ClionProjects/village.io/build")
set(CMAKE_BINARY_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})

find_package(Boost
        COMPONENTS program_options system REQUIRED)

set(SOURCE_FILES main.cpp) # src/Runner.cpp src/Runner.h src/workQueue/workQueue.h src/server/Server.cpp src/server/Server.h)
add_executable(village.io-server ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(village.io-server ${Boost_LIBRARIES} ${CONAN_LIBS})
Run Code Online (Sandbox Code Playgroud)

还有我的conanfile.txt:

[requires]
Poco/1.7.3@lasote/stable
easyloggingpp/9.80@memsharded/testing

[options]
Poco:shared=False

[generators]
cmake
Run Code Online (Sandbox Code Playgroud)

我生成的conaninfo.txt:

[settings]
    arch=x86_64
    build_type=Release
    compiler=gcc
    compiler.libcxx=libstdc++
    compiler.version=5.3
    os=Linux

[requires]
    Poco/1.Y.Z
    easyloggingpp/9.Y.Z

[options]


[full_settings]
    arch=x86_64 …
Run Code Online (Sandbox Code Playgroud)

c++ cmake poco-libraries conan

3
推荐指数
1
解决办法
1304
查看次数

C++ Poco ODBC 事务 - 自动提交模式

我目前正在尝试在我的 C++ 应用程序中使用事务,但我对 ODBC 的自动提交模式有问题。

我正在使用 POCO 库在同一台机器上创建到 PostgreSQL 数据库的连接。目前,我可以将数据作为单个语句发送到这个数据库,但我无法理解如何使用 Poco 的事务库来更快地发送这些数据。

因为我有几千条记录要插入,所以继续使用单个插入语句非常慢且不切实际 - 所以我试图使用 Poco 的事务来加快速度(相当一点)。

我遇到的错误理论上是一个简单的错误 - Poco 抛出以下错误:

'Invalid access: Session is in auto commit mode.'
Run Code Online (Sandbox Code Playgroud)

我明白,因此,我应该以某种方式将“自动提交”设置为 false - 因为它只允许我将数据逐行提交到数据库,而不是作为单个事务提交。

问题是我如何设置它。

目前,我有一个从 Session.h 创建的会话,它看起来很像这样:

 session = new Poco::Data::Session(
                "ODBC",
                connection_data.str()
            );
Run Code Online (Sandbox Code Playgroud)

其中连接数据是一个简单的字符串流,包含登录信息、密码、数据库、服务器和“Driver={PostgreSQL ANSI};” 告诉 ODBC 使用 PostgreSQL 的驱动程序。

我曾尝试通过会话的 setFeature 或 setProperty 设置将属性“自动提交”设置为 false,当然,这无济于事。(此时更像是一次尝试)。

   session->setFeature("AUTOCOMMIT", false);
Run Code Online (Sandbox Code Playgroud)

环顾四周,我看到了一种可能的替代方法,即直接从 ODBC/session/SessionImpl.h 创建一个 ODBC sessionImpl 而不是使用上面的这个通用方法,然后从中创建一个新的会话对象。

这样做的好处是 ODBC 的 sessionImpl 在标头中引用了自动提交模式,这表明它能够处理这个问题:

void autoCommit(const std::string&, bool val);
    /// Sets autocommit property for …
Run Code Online (Sandbox Code Playgroud)

c++ sql postgresql odbc poco-libraries

3
推荐指数
1
解决办法
783
查看次数

如何使用POCO发送websocket PONG响应

我正在尝试使用POCO 1.7.5设置websocket服务器.

这里发现的POCO样本效果很好.111-122行读取(sligthly prettified):

WebSocket ws(request, response);
char buffer[1024];
int n, flags;

do
{
    n = ws.receiveFrame(buffer, sizeof(buffer), flags);
    ws.sendFrame(buffer, n, flags);
}
while (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);
Run Code Online (Sandbox Code Playgroud)

但是,这种方法不需要通过乒乓帧来回答ping帧.如何使用POCO正确完成此操作?我试过以下,但我不知道它是否正确:

WebSocket ws(request, response);
char buffer[1024];
int n, flags;

do
{
    n = ws.receiveFrame(buffer, sizeof(buffer), flags);
    if ((flags & WebSocket::FRAME_OP_BITMASK) == WebSocket::FRAME_OP_PING){
        buffer[0] = WebSocket::FRAME_OP_PING;
        ws.sendFrame(buffer, 1, WebSocket::FRAME_OP_PONG);
    }
    else{
        ws.sendFrame(buffer, n, flags);
    }
}               
while (n > 0 && (flags & WebSocket::FRAME_OP_BITMASK) != WebSocket::FRAME_OP_CLOSE);
Run Code Online (Sandbox Code Playgroud)

不知道这是否是正确的做法,并且无法在线找到,包括POCO文档.该 …

c++ websocket poco-libraries

3
推荐指数
1
解决办法
1131
查看次数

C++ Poco - 如何迭代 JSON 数组?

我看过一些如何迭代思想嵌套对象的示例JSON,例如:

 "{ \"test\" : { \"property\" : \"value\" } }"
Run Code Online (Sandbox Code Playgroud)

但现在我需要迭代一个JSON数组(下面的子数组 array):

"{ \"name\" : \"Franky\", \"children\" : [ \"Jonas\", \"Ellen\" ] }"
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这个目标?

我在任何地方都看不到示例,甚至在POCO文档中都看不到。

我有下面的示例,但无法获取Children数组。

Poco::Dynamic::Var test = object->get("children");

Poco::JSON::Array::Ptr subObject = test.extract<Poco::JSON::Array::Ptr>();

for (it = subObject->begin(); it != subObject->end(); it++) // how to iterate here?
{
    std::cout << "my children:" << it->first << "\n";
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays poco-libraries

3
推荐指数
1
解决办法
4911
查看次数

C++ POCO - 如何美化 JSON?

JSON使用这样的POCO库生成一个文件:

void writeToFile()
{
    Poco::JSON::Object::Ptr json = new Poco::JSON::Object;
    json->set("name", "foo");
    json->set("address", "bar");

    std::ostringstream oss;
    Poco::JSON::Stringifier::stringify(json, oss);
    std::ofstream ofs("output.json");
    if (ofs.is_open() == true)
    {
        ofs << oss.str();
        ofs.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

其中output.json包含:

{"name":"foo","address":"bar"}
Run Code Online (Sandbox Code Playgroud)

有什么办法POCO可以美化一个JSON

所以输出会是这样的:

{
    "name" : "foo",
    "address" : "bar"
}
Run Code Online (Sandbox Code Playgroud)

c++ json poco-libraries

3
推荐指数
1
解决办法
1483
查看次数