HttpSendRequest не публикува правилно

Правя проста POST заявка с помощта на WinInet към apache уеб сървър. Кодирам данните, като използвам база 64. Проблемът е, че всеки знак + се заменя със знак за интервал.

Защо е така и как мога да направя правилна POST заявка.

hInternet = InternetOpen(NULL, INTERNETOPENTYPEPRECONFIG, NULL, NULL, 0);
if (hInternet)
{
    hConnect = InternetConnect(hInternet, szDomain, INTERNETDEFAULTHTTPPORT, NULL, NULL, INTERNETSERVICEHTTP, 0, dwTmp);
    if (hConnect)
    {
        hRequest = HttpOpenRequest(hConnect, szPost, szExfiltrationURL, NULL, NULL,(char *)accept, INTERNETFLAGNOCACHEWRITE | INTERNETFLAGNOCOOKIES | INTERNETFLAGNOUI | INTERNETFLAGRELOAD, 0);
        if (hRequest)
        {
            HttpSendRequest(hRequest, headers, lstrlen(headers), buffer, buflen);
            InternetCloseHandle(hRequest);
        }

        InternetCloseHandle(hConnect);
    }

    InternetCloseHandle(hInternet);
}

person opc0de    schedule 01.08.2014    source източник
comment
Защо кодирате данни като base64 на първо място? POST тяло може да съдържа некодирани двоични данни. И в POST заявка вашите данни трябва да са в тялото, а не в URL адреса.   -  person Remy Lebeau    schedule 01.08.2014


Отговори (1)


От W3

„В низа на заявката знакът плюс е запазен като съкратена нотация за интервал:

Източник: "http://www.w3.org/Addressing/URL/4_URI_Recommentations.html"

person Jude Pereira    schedule 01.08.2014
comment
Можете да използвате процентно кодиране. w3schools.com/tags/ref_urlencode.asp Така „+“ става %2B. - person Jude Pereira; 01.08.2014