2

http-post リクエストをサーバーに送信する必要があります。libcurl 関数を使用することにしました。要求データは xml 形式のようにする必要があります。そのため、libxml2 を使用して文字列を xml に変換し、xml ファイルを buf に読み込み、buf を libcurl に渡し、ポスト リクエストを終了します。libxml2でencoding-utf8で作成したxmlファイルをlibcurl関数に送ると正常なようです。しかし、パッケージをサーバーにキャッチしたところ、英語の文字はすべて正常であることがわかりましたが、私の母国語である「中国語」は「?」に置き換えられており、本当に混乱しました。utf-8 文字列を転送するように libcurl 関数を設定できますか? さて、私のテスト環境は linux c です。これは libxml2 によって作成された私の xml です:

<vehicleName>±GM7180LE AT</vehicleName>

ご覧のとおり、英字はすべて正常です。最初の 2 文字はすべて中国語です。それらは「别克」でなければなりません。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 に正常に解析できます。

それで全部です。

4

1 に答える 1