我需要向服务器发送http-post请求。我选择使用libcurl函数。请求数据必须类似于xml格式。因此,我使用libxml2将字符串转换为xml,然后将xml文件读入buf,将buf传递给libcurl,完成post请求。 由libxml2在encoding-utf8中创建的xml文件,当我将数据发送到libcurl函数时,似乎是正常的。但是我把包裹拿到服务器上,发现英文字符都很正常,但是我的母语“中文”被一个'?'取代,好吧,它真的让我很困惑。 我现在应该怎么做,我可以设置libcurl函数来传输utf-8字符串吗? 好吧,我的测试环境是linux c。 这是我的libml2创建的xml:
<vehicleName>±GM7180LE AT</vehicleName>
你可以看到,英文字符都很正常。前两个字符都是中文。 他们应该是“别克”。 libxml2自动将其从gb2312转换为utf8。
xmlSaveFormatFileEnc(createXML, doc, "UTF-8", 1);
然后我将从这个xml读取的字符串发送到libcurl函数,但我发现事实是:服务器接收的数据不像是±GM而是GM。 libcurl代码是 curl_easy_setopt(curl,CURLOPT_URL,ip_addr); curl_easy_setopt(curl,CURLOPT_POSTFIELDS,requestMsg); curl_easy_setopt(curl,CURLOPT_POSTFIELDSIZE,strlen(requestMsg)); 我现在该怎么办?
回答Alfe: libxml2代码如下:
char licenseNo_text[20] = "沪33333";
licenseNo = xmlNewNode(NULL, BAD_CAST "licenseNo");
content = xmlNewText(BAD_CAST licenseNo_text);
xmlAddChild(QueryVehicleModelRequest, licenseNo);
xmlAddChild(licenseNo, content);
将节点添加到xml文件后,我将其读入buf:
while ((ch = getc(fp)) != EOF) {
if (ch != '\n')
buf[i++] = ch;
}
我认为buf已经在utf-8中,所以我直接将它传递给libcurl函数:
ret = func_libcurl(buf, headerfilename, bodyfilename);
func_libcurl代码是,requestMsg是http-post head and body:
curl_easy_setopt(curl, CURLOPT_URL, ip_addr);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestMsg);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(requestMsg));
headerfilename,bodyfilename是文件描述符,用于保存服务器响应中的数据。
最后,我使用libxml2来解析文件“bodyfilename”。文件“bodyfilename”保存了来自服务器的响应数据。它在utf-8中,我可以成功地将其解析为gb2312。
这就是全部。
答案 0 :(得分:0)
_ CURLOPT_POSTFIELDS
标志的文档说:“您必须确保数据的格式符合您希望服务器接收它的方式.libcurl不会为您转换或编码。大多数Web服务器将假设此数据为url编码。“尝试对您的数据使用curl_easy_escape()
,并将其用作请求的发布数据。