Настройка параметров HTTP POST в Windows Mobile - PullRequest
2 голосов
/ 01 октября 2010

Недавно я пытался сделать запрос HTTP POST в Windows Mobile, но запрос POST не был успешным. Это то, что я пытался сделать Здесь sRequestHeaders - это заголовки в Unicode, а в документации MSDN сказано следующее о параметре «lpOptional», который используется для параметров POST

pOptional [in]

Указатель на буфер, содержащий любые дополнительные данные, которые будут отправлены сразу после заголовков запроса. Этот параметр обычно используется для операций POST и PUT. Необязательные данные могут быть ресурсом или информацией, размещаемой на сервере. Этот параметр может иметь значение NULL, если нет дополнительных данных для отправки.

dwOptionalLength [in]

Размер необязательных данных в байтах. Этот параметр может быть нулевым, если нет дополнительных данных для отправки.

Он просто говорит, что pOptional - это буфер, содержащий необязательные данные, а dwOptionalLength задает буфер в байтах, но при попытке отправить буфер Unicode и его размер в байтах на этот вызов ответ был не 200 (HTTP_OK). После нескольких попыток я обнаружил, что параметры должны быть в буфере ANSI. Все остальные параметры имеют отношение к LPCTSTR, то есть к буферу TCHAR, только он должен быть буфером ANSI. Вот код для этого

if( FALSE == HttpSendRequest(hRequest, (LPCTSTR)sRequestHeaders, sRequestHeaders.GetLength(), LPVOID)(LPSTR)pszAnsiRequestParams, dwRequestParamsLen ) )

В приведенном выше вызове pszAnsiRequestParams - это буфер ANSI, а dwRequestParamsLen - размер этого буфера в байтах. После того как я изменил это, ответ был 200. Это, как каждый будет отправлять параметры всегда? Если это так, как я буду отправлять параметры POST Unicode? Поскольку в моем случае я имел дело с символами ASCII, это работает нормально, но я чувствую, что должен быть выход.

Может кто-нибудь выложить решение, что еще мне здесь не хватает?

1 Ответ

0 голосов
/ 11 октября 2010

Я не уверен в части кодирования, но вот другой подход, если все, что вам нужно, это отправлять параметры POST.Я использовал HttpWebRequest для отправки параметров сообщения.Вот фрагмент кода.

HttpWebRequest webRequest;
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";

// Prepare a requestParameterString
private String PrepareRequestString(String requestParameterString, String requestParamName, String data)
{
    if (!requestParameterString.Equals(String.Empty))
    {
        requestParameterString += "&";
    }
    return requestParameterString += requestParamName + "=" + data;
}

// Set the request param data.
Stream requestStream = null;
webRequest.ContentLength = data.Length;
byte[] buffer = Encoding.UTF8.GetBytes(data);
requestStream = webRequest.GetRequestStream();
requestStream.Write(buffer, 0, buffer.Length);

// Finally, make the call.
WebResponse response = webRequest.GetResponse();
...