Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows mobile 在Windows Mobile中设置HTTP POST参数_Windows Mobile - Fatal编程技术网

Windows mobile 在Windows Mobile中设置HTTP POST参数

Windows mobile 在Windows Mobile中设置HTTP POST参数,windows-mobile,Windows Mobile,最近,我试图在Windows Mobile中进行HTTP POST查询,但POST查询未成功。这就是我一直试图做的 这里的SRequesHeaders是Unicode格式的标题,MSDN文档说明了以下关于用于POST参数的“lpOptional”参数 流行的[流行的] 指向缓冲区的指针,该缓冲区包含在请求头之后立即发送的任何可选数据。此参数通常用于POST和PUT操作。可选数据可以是发布到服务器的资源或信息。如果没有要发送的可选数据,则此参数可以为NULL dwOptionalLength[英寸

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

流行的[流行的]

指向缓冲区的指针,该缓冲区包含在请求头之后立即发送的任何可选数据。此参数通常用于POST和PUT操作。可选数据可以是发布到服务器的资源或信息。如果没有要发送的可选数据,则此参数可以为NULL

dwOptionalLength[英寸]

可选数据的大小,以字节为单位。如果没有要发送的可选数据,则此参数可以为零

它只是说,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字符,这很好,但不知何故,我觉得应该有一条出路


有人能发布一个解决方案吗?我还缺少什么?

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

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