当前位置: 首页 > 知识库问答 >
问题:

使用libcurl更改内容类型

东方宜
2023-03-14

我有这个代码:

#include <curl/curl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    CURL *curl;
    CURLcode res;

    curl = curl_easy_init();

    if(curl)
    {
        curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
        curl_easy_setopt(curl, CURLOPT_URL, "localhost/rest-v1/devices/did1/tasks");
        curl_easy_setopt(curl,CURLOPT_PORT,22080);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"hello\" : \"darkness\"}");

        res = curl_easy_perform(curl);

    }

    curl_easy_cleanup(curl);
    return 0;
}

当我运行它时,我在控制台上得到以下打印:

*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 22080 (#0)
> POST /rest-v1/devices/did1/tasks HTTP/1.1
Host: localhost:22080
Accept: */*
Content-Length: 16
Content-Type: application/x-www-form-urlencoded

* upload completely sent off: 16 out of 16 bytes
< HTTP/1.1 415 Unsupported Media Type
< Server: Restlet-Framework/2.3.9
< Date: Fri, 23 Jun 2017 06:44:09 GMT
< Content-type: application/json; charset=UTF-8
< Content-language: *
< Content-length: 35
< Accept-ranges: bytes
< 
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact

因此,它返回415个不受支持的媒体类型错误代码。

我在StackOverflow上发现,它可能是由上下文类型中的charset=UTF-8引起的。所以我的问题是,我如何编辑这个字段来满足我的需求(删除charset=UTF-8)。链接

如何更改该内容类型。由于我不熟悉HTTP协议,请详细说明。

共有1个答案

糜鸿风
2023-03-14

根据URL/rest-v1/devices/did1/tasks,您正在使用IBM Business Process Manager rest接口。文件规定:

媒体类型

请求或回复中包含的数据将属于以下媒体类型之一:

application/json:json(JavaScript对象表示法)-这是默认的响应内容类型。有关每个返回对象的详细格式,请参阅每个操作的JSON模式规范。

application/xml:xml(可扩展标记语言)-基于xml的数据的格式由产品在/properties/schemas/bpmrest/v1目录中提供的xml模式指定。每个操作的文档中也提供了这些模式的摘录。

application/x-javascript:JSONP(带填充的JSON)-此格式可以用作JSON的替代格式。在本例中,每个返回的JSON响应都包装在一个JavaScript回调函数调用中。要使用此功能,还必须指定回调URI查询参数。

因此,您必须选择其中一种内容类型(而不是上下文类型!)用于您的请求,而不是应用程序/x-www-form-urlencoded。在示例代码段中,您使用JSON,因此适当的数据类型是application/JSON。您可以按如下方式进行设置:

struct curl_slist *hs=NULL;
hs = curl_slist_append(hs, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, hs);

这应该可以消除您观察到的HTTP错误415。

 类似资料:
  • 问题内容: 我的JTable有问题。我的JTable显示数据库的内容。一个数据库表具有名称类别。每个类别都显示在JComboBox中。如果单击类别,则应该更新表内容。 这是我的代码的简短摘要,因此可以更轻松地为我提供帮助。该代码应可运行: (TestClass-主要) (如果需要,则为TestTableModel-AbstractTableModel(您需要它来执行代码!) 使用此短代码,如果更改

  • 问题内容: 我正在为我的Android手机构建一个小型应用程序,以使用非常基本的REST界面将短信转发到网络服务器。 我正在使用android 4.0.3 SDK。我使用Django和Django restframework包在python中开发了Web服务。设置完全是开箱即用的。基本上有一个端点可以接收包含消息信息(发送者,正文,日期)的JSON对象的POST。我已经使用cURL通过以下命令测试

  • 我正在为我的Android手机构建一个小应用程序,使用非常基本的REST界面将短信转发到网络服务器。 我正在使用android 4.0.3 SDK。我使用Django和Django restframework包在python中开发了webservice。设置完全是开箱即用的。基本上只有一个endpoint接收包含消息信息(发件人、正文、日期)的JSON对象的帖子。我使用cURL和以下命令测试了该服

  • 我有一本书。NETCore2.0WebAPI应用程序,其中我将“Flurl.Http”(版本2.1.0)NuGet包添加到我的项目中。 我正在尝试使用Flurl对一个VisualStudioTeamServices(VSTS)APIendpoint进行简单的RESTAPI调用。 但是,我正在调用的特定VSTS api终结点要求将Content-Type设置为“应用程序/json-补丁json”,而

  • 问题内容: 我正在使用一个使用Swing的旧版应用程序,我正在努力弄清用户单击按钮时屏幕的变化情况。我无法弄清楚的原因之一是因为这是我第一次使用Swing。我读了一本书,掌握了基础知识,但仍然很挣扎。 基本上,我正在查看的屏幕具有一个JSplitPane,其左侧具有多个快捷按钮,而右侧具有一个空白窗格。当我单击该按钮时,根据所按下的按钮,右侧窗格中会显示一个不同的屏幕。 遍历代码,我期望在某处会有

  • 问题内容: 函数可以工作并检测表单元素的更改,但是有没有一种方法可以检测DOM元素的内容何时更改? 这是行不通的,除非是表单元素 我希望在执行类似操作时触发此操作: 另外或函数没有回调。 有什么建议么? 问题答案: 我没有在jQuery中使用突变事件API,但是粗略的搜索使我进入了GitHub上的该项目。我不知道该项目的成熟度。