在 C++ 中使用 Wininet 发送 POST 请求时的编码问题
Posted
技术标签:
【中文标题】在 C++ 中使用 Wininet 发送 POST 请求时的编码问题【英文标题】:Problem of encoding when sending POST request using Wininet in C++ 【发布时间】:2019-12-31 11:27:47 【问题描述】:我想使用 Wininet 在 POST 请求中发送 UTF-8 内容。
内容已正确发送,但是当它是像 €
这样的特殊字符时,不会正确写入和打印。
我对 Postman 也有同样的问题,所以我不太清楚是我的 php 代码来编写接收到的内容还是我的 C++ 代码。 这是将内容写入文本文件以测试接收功能的 PHP 代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<?php
$fh = fopen("amount_test.txt", 'w') or die("can't open file");
fwrite($fh, utf8_encode($_POST["amount"]));
fclose($fh);
?>
</body>
</html>
这是发送带有 UTF-8 内容的 POST 请求的函数:
void sendAmount()
LPCWSTR browser = L"Game/2.3";
LPCWSTR domain = L"127.0.0.1";
LPCWSTR methode = L"POST";
LPCWSTR page = L"/minigame/engine/sendAmount.php";
std::wstring strContentType = L"Content-Type: application/x-www-form-urlencoded; charset=utf-8";
LPCWSTR contentType = strContentType.c_str();
std::string dataStr = "amount=" + "42,342€";
LPVOID dataToSend = (LPVOID)dataStr.c_str();
HINTERNET hInternet = InternetOpenW(browser, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
HINTERNET hConnection = InternetConnectW(hInternet, domaine, 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
HINTERNET hRequest = HttpOpenRequestW(hConnection, methode, page, NULL, NULL, NULL, 0, 1);
HttpSendRequestW(hRequest, contentType, strContentType.size(), dataToSend, dataStr.size());
【问题讨论】:
【参考方案1】:每个字符串都是wchar
,除了:
std::string dataStr = "amount=" + "42,342€";
应该是:
std::wstring dataStr = L"amount=" + L"42,342€";
【讨论】:
以上是关于在 C++ 中使用 Wininet 发送 POST 请求时的编码问题的主要内容,如果未能解决你的问题,请参考以下文章
HttpOpenRequest () Wininet c++ e PHP