2010-10-01 81 views
2

最近我试图在Windows Mobile中创建一个HTTP POST查询,但POST查询不成功。这是我一直在努力做 这里sRequestHeaders是这是Unicode和MSDN文档的标题说以下有关它用于POST“lpOptional”参数参数在Windows Mobile中设置HTTP POST参数

pOptional [中]

指向缓冲区的指针,该缓冲区包含在请求标头后立即发送的任何可选数据。该参数通常用于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字符的时间,这工作正常,但不知何故,我觉得应该有一个出路。

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

回答

0

我不确定编码部分,但如果你只关心发送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();