在Windows Mobile中设置HTTP POST参数

时间:2010-10-01 12:35:02

标签: windows-mobile

最近我试图在Windows Mobile中进行HTTP POST查询,但POST查询不成功。这就是我一直在努力做的事情 这里的sRequestHeaders是Unicode中的标题,MSDN文档中说明了以下关于用于POST参数的“lpOptional”参数

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.这是一个总是会发送参数的方式吗?如果是这种情况,我将如何发送Unicode POST参数?因为在我的情况下,我正在处理ASCII字符暂时工作正常,但不知怎的,我觉得应该有一条出路。

有人可以发布解决方案我还缺少什么吗?

1 个答案:

答案 0 :(得分:0)

我不确定编码部分,但如果您只关心发送POST参数,这是另一种方法。我使用HttpWebRequest发送post参数。这是一个片段。

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();