HTTP Posting 大字符串导致请求超时
Posted
技术标签:
【中文标题】HTTP Posting 大字符串导致请求超时【英文标题】:HTTP Posting large string results in request timeout 【发布时间】:2016-12-07 11:06:52 【问题描述】:我的桌面应用程序是 HTTP 将数据发布到我的 Apache 服务器(与我的 php 脚本交互)。我正在发布大量数据(一个 800kb 大小的文件的内容)。
当我发送 HTTP 发布请求时,它超时并出现以下 Windows 错误:
ERROR_INTERNET_TIMEOUT 请求已超时
但如果我发送较小的文件,那么一切都很好,我的 PHP 脚本会处理发布请求。这可能是什么原因,我该如何解决这个问题?
我的网站是 WordPress,我已将我的 php.ini
、php5.ini
和 .user.ini
更改为都具有以下文本,但对于大文件仍然失败。
file_uploads = On
post_max_size = 128M
upload_max_filesize = 128M
编辑:使用phpinfo();
进行检查后(max_execution_time 是否应该在末尾有一个 S(秒数?):
C++ 代码:
TCHAR hdrs[] = _T("Content-Type: application/x-www-form-urlencoded");
LPSTR accept[2] = "*/*", NULL ;
HINTERNET hConnect = NULL, hSession = NULL, hRequest = NULL;
DWORD len = postData.length() * 2;
tstring formattedPostData(len, ' ');
InternetCanonicalizeUrl(postData.c_str(), &formattedPostData[0], &len, ICU_BROWSER_MODE);
std::replace(formattedPostData.begin(), formattedPostData.end(), '=', '~');
tstring authData = _T("usage=") + formattedPostData + _T("&auth=") + authToken;
hSession = InternetOpen(_T("uploader"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (!hSession)
output(_T("InternetOpen failed: %s\n"), getLastErrorAsString().c_str());
res = S_UNDEFINED_ERROR.state;
goto Cleanup;
hConnect = InternetConnect(hSession, domain.c_str(),
INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
if (!hConnect)
output(_T("InternetConnect failed: %s\n"), getLastErrorAsString().c_str());
res = S_UNDEFINED_ERROR.state;
goto Cleanup;
hRequest = HttpOpenRequest(hConnect, _T("POST"),
domainScript.c_str(), NULL, NULL, (LPCWSTR*)&accept, INTERNET_FLAG_NO_CACHE_WRITE, 1);
if (!hRequest)
output(_T("HttpOpenRequest failed: %s\n"), getLastErrorAsString().c_str());
res = S_UNDEFINED_ERROR.state;
goto Cleanup;
// Error occurs here
output(_T("Post: %s\n"), authData.c_str());
if (!HttpSendRequest(hRequest, hdrs, -1, (LPVOID)authData.c_str(), authData.size() * sizeof(TCHAR)))
// Error is 12002: timeout
output(_T("HttpSendRequest failed: %d.\n"), GetLastError());
res = S_UNDEFINED_ERROR.state;
char responseText[1024];
DWORD responseTextSize = sizeof(responseText);
output(_T("Res: %d\n"), HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, &responseText, &responseTextSize, NULL));
output(_T("Response: %s\n"), responseText);
goto Cleanup;
【问题讨论】:
检查错误日志并告诉我。 也许这可以帮助你:max_input_time @Saching。我检查了错误日志,今天没有条目。 php.ini 中的 max_execution_time 是多少? @Saching。它的 10,查看我的编辑,显示一些 phpinfo() 属性 【参考方案1】:您是否尝试过增加脚本超时时间?
http://php.net/manual/en/function.set-time-limit.php
您还在将文件或文本块复制粘贴到文本区域或类似内容中吗?
【讨论】:
我的桌面应用程序将文件内容作为一个长字符串发布。例如;fileContents=abc....&auth=abc
作为 http 帖子还是获取?还有你发送的字符串里面有什么奇怪的字符吗?
它是一个帖子,它是 urlencoded,但我还必须将文件 =
字符替换为 ~
字符,以免与帖子格式冲突
好酷 - 您是否使用表单来发送数据?你设置了enctype吗? w3schools.com/tags/att_form_enctype.asp你有我们可以查看的代码示例吗?
在更新 .ini 文件时,您是否重新启动了 http 服务器?以上是关于HTTP Posting 大字符串导致请求超时的主要内容,如果未能解决你的问题,请参考以下文章
PHP curl 上传大文件非常大慢,导致超时,小文件(10M以下)的还可以,请问如何解决啊!