首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinHttp邮寄体未收到

WinHttp邮寄体未收到
EN

Stack Overflow用户
提问于 2010-09-24 22:38:38
回答 1查看 2.5K关注 0票数 6

我将带有POST数据的WinHttp请求发送到IIS7服务器上的php脚本,而服务器没有接收POST正文。如果我使用GET通过WinHttp发送,或者使用带有空正文的POST发送,或者使用POST和body通过HTML发送,一切都如预期的那样工作。

下面是一些简单的代码,显示了by WinHttp POST调用与不带主体的调用之间的区别:

没有身体:

代码语言:javascript
复制
HINTERNET hSession = WinHttpOpen(L"WinHTTP/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);//WINHTTP_FLAG_ASYNC);
HINTERNET mConnection = WinHttpConnect(hSession, L"127.0.0.1", 80, 0);
HINTERNET hRequest = WinHttpOpenRequest(mConnection, L"POST", L"/test.php", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
void* bodyData = NULL;
DWORD bodyLength = 0;
bResult = WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, bodyData, bodyLength, bodyLength, 0);

身体:

代码语言:javascript
复制
HINTERNET hSession = WinHttpOpen(L"WinHTTP/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);//WINHTTP_FLAG_ASYNC);
HINTERNET mConnection = WinHttpConnect(hSession, L"127.0.0.1", 80, 0);
HINTERNET hRequest = WinHttpOpenRequest(mConnection, L"POST", L"/test.php", NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
char* pBodyStr = "a=1&b=2";
void* bodyData = (void*) pBodyStr;
DWORD bodyLength = strlen(pBodyStr);
bResult = WinHttpSendRequest(hRequest, L"content-type:application/x-www-form-urlencoded", -1, bodyData, bodyLength, bodyLength, 0);

因此,唯一的区别是主体参数和内容类型的标题。真正奇怪的是,这可能工作了20次中的1次,但通常服务器不会接收到身体,并且会超时。这里有什么明显的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2012-08-27 06:56:56

对于仍然存在此问题的其他任何人,请尝试使用PUT而不是POST

在我的例子中,WinHttp客户机在VFP中,但是结果是相同的。通过浏览器发送的帖子工作正常,但是当我从WinHttp对象发送时,请求体看起来是空的。

然而,PUT正常工作..。除了这个

代码语言:javascript
复制
// Simply using
// 
//    file_get_contents('php://input')
//    
// does not work with the request sent by WinHttp.WinHttpRequest.
$fp = fopen('php://input', 'rb');
stream_filter_append($fp, 'dechunk', STREAM_FILTER_READ);
$report_contents = stream_get_contents($fp);

同样,在基于浏览器的请求中,这不是一个问题。

另外,这篇文章对于ASP.NET客户端也很好。只有在尝试在PHP/Linux页面上读取它时才会出现这种情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3791520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档