【问题标题】:Post a text request in Casablanca (C++ REST SDK)在 Casablanca 中发布文本请求(C++ REST SDK)
【发布时间】:2014-09-21 06:48:27
【问题描述】:

我正在使用 C++ Rest SDK(代号“Casablanca”)在 Visual C++ 2012 中编写客户端代码。 我创建了一个客户端并希望将一个文本字符串发布到服务器。但是,当我发送以下代码时,它正在编译但不发送发送请求。 当我在“methods::POST”之后删除所有内容并发送一个空白的发布请求时,服务器会发送和接收它。 你能指导我问题出在哪里吗?与此功能相关的文档位于Casablanca Documentation

pplx::task<http_response>resp = client.request(methods::POST,L"",L"This is the random text that I wish to send", L"text/plain");

【问题讨论】:

    标签: visual-c++ httpclient casablanca


    【解决方案1】:

    我认为你在这里给出的用法看起来是正确的。 你的卡萨布兰卡是最新版本吗?请从这里查看:http://casablanca.codeplex.com/ 如果您确定您的测量是准确的,您可能需要创建一个最小的复制并在此处提交错误:http://casablanca.codeplex.com/workitem/list/basic

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题,我所有的帖子在服务器上都是空白的,经过几个小时的工作,我找到了一个可能的解决方案。 我将默认内容类型更改为 application/x-www-form-urlencoded 并开始传递类似此示例 data=text1&amp;data2=text2 的值

      client.request(methods::POST,L"",L"data=text1&data2=text2", L"application/x-www-form-urlencoded");
      

      【讨论】:

        【解决方案3】:

        body 参数必须是 json::value。

        【讨论】:

        • 不能发送普通文本吗?此外,当我尝试使用 -json::value obj; 创建 json::value 时obj[L"key1"] = json::value::string(U("str"));代码只挂在那里;它没有进一步进行。我从link 得到了这段代码
        【解决方案4】:

        我还不能发表评论,所以我必须把我的想法放在答案中。我这样解决了这个问题:请求方法有一个重载,它将内容类型作为参数,这样您就不必更改代码。

        m_client->request(methods::POST, L"/statuses/update.json?" + url_encode(data),L"",L"application/x-www-form-urlencoded");
        

        显然您必须实现 url_encode 方法,但这并不困难。 “卡萨布兰卡”中有一个很好的实现。在这个网站上搜索也会发现一些很好的例子。

        【讨论】: