问题标签 [cpprest-sdk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
11220 浏览

c++ - 获取卡萨布兰卡HTTP请求的IP

我有一个小型服务器,它使用 Casablanca / cpprestsdk 监听 http 请求。我已经看到其他 API 提供了检索客户端 IP 的功能,但是在搜索 Internet 和 sdk 之后,嗯..我在这里。

有什么帮助吗?

0 投票
1 回答
1584 浏览

c++ - 如何从卡萨布兰卡的多个任务中捕获异常

我正在尝试使用任务的&& 运算符加入两个 pplx 任务,其中两个子任务都可能引发异常。

我从ppl 文档中了解到,我可以在基于任务的最终延续中捕获异常。这也适用于卡萨布兰卡。但是,我在最后的延续中只能捕获一个异常。如果两个子任务都抛出,一个仍然未处理。

这是一个说明我的问题的最小示例:

try/catch 能够捕获首先发生的两个异常中的任何一个。我怎样才能抓住另一个?

0 投票
0 回答
119 浏览

c++ - 如何在 cpprest 中为 http_client 选择接口

我正在为我的 http 客户端应用程序使用 cpprest sdk。运行此应用程序的工作站有 2 个网络接口/适配器:eth0 和 eth1。如何在 http_client 代码中指定应该使用哪个接口来发送 http 请求和接收响应?

0 投票
1 回答
156 浏览

c++ - 如何绕过Windows上的主机文件获取真实IP地址

我在 C:\Windows\System32\drivers\etc\hosts 中添加了主机 IP 映射

我尝试了 getaddrinfo 和 DnsQuery,都不起作用。

DsnQuery 代码来自此示例。结果是:

主机www.facebook.com的IP地址是192.168.1.105

但是,命令“nslookup”工作正常:

C:\Users\abc>nslookup www.facebook.com

服务器:public1.114dns.com

地址:114.114.114.114

非回复:

名称:www.facebook.com

地址:200:2:2e52:ae44::

0 投票
1 回答
336 浏览

c++ - 使用 STL 容器作为成员时,cpprestsdk 处理程序类崩溃

我使用 cpprestsdk 编写了一个简单的代码。我使用 map ( records) 作为 CommandHandler 类的成员,并在公共方法 ( has_record()) 中对其进行操作。

它在handler.open().wait()运行之前工作,但是当我在请求中调用它时,它崩溃了!

这是我的代码:

0 投票
1 回答
2285 浏览

json - 使用 cpprest-sdk 的 json 服务的 POST 问题,连接到 jeasyui

我正在开发一个 Web 服务来为jeasyui异步树提供 json 对象。我的 HTML 有以下内容:

假设 wxyz 是我服务器的 IP 地址。根据他们的 PHP json 服务的 jeasyui 文档,我需要返回一个字典对象数组,其中包含idtextstate. 好的,到目前为止一切顺利。我正在尝试使用 Microsoft 的 cpprest-sdk 在 c++ 中开发 json 服务。我在 RHEL 7.2 上编译并安装了这个库,并且能够使用它编写一些基本服务。问题在于(我认为)与发送回客户端的 json 编码有关。

这是一个使用 cpprest-sdk 编写的全功能示例 json 服务器,它处理 POST 请求并使用符合 jeasyui 预期协议的字典对象的单个填充数组进行回复:

这可以干净地编译,我可以使用以下命令在 linux 服务器上启动服务:

为了帮助调试,我一直在使用curl直接在同一个 linux 服务器上充当 POST 客户端。我一直在使用以下命令发送内容长度为 0 的 POST 请求:

curl 的输出如下:

来自我的服务的控制台消息如下:

前两行对应TRACE于代码中的调用。中间部分是由这段代码生成的:

基于 curl 输出,它是一个字典对象数组,只有一个条目长,我希望这个服务可以与客户端上的jeasyui javascript 一起正常工作。但是,事实并非如此。我的异步树永远不会填充,我什么也看不到。

我怀疑编码有问题,所以我使用 web2py 编写了另一个服务来测试它是否可以在那里工作。我的 default.py 控制器中存在以下代码:

在修改我的客户端easyui-treeHTML 以指向 web2py URL 后,它完美地填充并且我可以看到该节点。我用 curl 打了 web2py service.json 代码,只是为了看看输出可能会有什么不同:

除了内容标题完全不同之外,我怀疑有一行可能与它有关:

在对 cpprest 服务的调用中,curl 输出的标头不包含charset=utf-8在其中。如果我使用开关将 curl 输出转储到文件中-o,我看不出编码之间有任何明显的区别。我唯一能看到的 json 格式不同的是一些额外的空格和排序:

我无法控制 json 字典的发送顺序,但我怀疑这与它有什么关系。值条目前面的额外空格似乎也无关紧要。

我已经在 microsoft.github.io/cpprestsdk/index.html 上翻阅了 cpprest 文档,但找不到与设置输出编码相关的任何内容。有许多覆盖http_request::reply包括用于设置内容类型的选项,我已经走上了用 json 正文和内容类型的硬编码字符串调用它们的道路,json/application; charset=utf-8但都无济于事。无论如何,我看不到这些覆盖如何与 json::value 对象一起使用,因此我认为这不是此 cpprest 库的最佳路径或可行使用。

jeasyui javascript 代码似乎是故意混淆的,我不太相信能够弄清楚它对 POST 调用的回复做了什么。也许熟悉 jeasyui 的人可以指出调试异步 POST 的可行方法?

请帮忙!

0 投票
0 回答
993 浏览

c++11 - HTTP 服务器 cpprest POST 处理文件流

我在谷歌上找到了这段代码,它基本上通过 cpprest 以异步模式将文件上传到 HTTP 服务器。如果我有足够的资源(我是 PPL 和 cpprest 的新手,并且在 msdn 上阅读了很多网页),我创建一个从 out.txt 打开 ifstream 的任务,然后创建另一个使用文件的 PUT 方法发出 HTTP 请求的任务流作为上一个任务的输入的主体。

如果它是正确的......从服务器端:1)如何使用文件流管理 PUT 方法?2)我需要打开一个与输入文件同名的文件,是否可以从正文 HTTP PUT 中提取此信息,或者我需要将此信息放入“out.txt”中?

0 投票
0 回答
271 浏览

c++ - C++ REST SDK 编译错误(Centos 6)

我正在关注本教程:https ://github.com/Microsoft/cpprestsdk/wiki/How-to-build-for-Linux 。目前我已完成第 4 步,在编译 SDK 时遇到了一些问题:

现在在谷歌上尝试解决这个问题几个小时。我不确定如何解决此错误或导致它的原因。任何帮助将不胜感激。

0 投票
1 回答
651 浏览

rest - 使用 CPPREST SDK 将图像上传到 HipChat

我正在尝试使用 CPPREST SDK 将图像上传到 HipChat,但没有成功。有将图像上传到其他服务器的示例,但 HipChat API 似乎更复杂(对此我非常陌生,我无法填补空白......)。

来自 HipChat REST API 文档(https://www.hipchat.com/docs/apiv2/method/share_file_with_room):

与房间共享文件。

将请求格式化为 multipart/related 与内容类型 application/json 的单个部分和包含您的文件的第二部分。

注意:包含该文件的部分必须在该部分的 Content-Disposition 标头中包含 name="file"。包含消息的 application/json 部分是可选的,可以排除,但文件部分是必需的

示例请求:

标题:

内容类型:多部分/相关;边界=边界123456

身体:

--boundary123456 内容类型:应用程序/json;字符集=UTF-8

内容处置:附件;名称="元数据"

{"message": "查看此文件上传!"}

--boundary123456 内容类型:图片/png

内容处置:附件;名称="文件"; 文件名="上传.png"

“文件内容在这里”

--boundary123456--

我正在尝试使用 set_body() 方法: void web::http::http_request::set_body(const concurrency::streams::istream& stream, ....) 但我不知道如何插入文件流在所有上述复合体内部。set_body() 的文档说:“这不能与设置请求正文的任何​​其他方式结合使用”。我是否需要将文件读入字符串并将其嵌入到“文件内容位于此处”的位置,并使用其他 set_body() 方法之一,而不是将 set_body() 方法与文件流一起使用?

谢谢, 奥弗

0 投票
1 回答
476 浏览

c++ - 卡萨布兰卡 cpprestsdk 的 400 错误请求

上面的代码给出了以下输出:

你能告诉我我的参数有什么问题吗?