Reputation: 131
My desktop application is HTTP posting data to my Apache server (interacting with my PHP script). I am posting alot of data (the contents of a file that is 800kb in size).
When I send the HTTP post request it times out with the below Windows error:
ERROR_INTERNET_TIMEOUT The request has timed out
But if I send smaller files then everything is fine and my PHP script handles the post request. What could be the cause of this and how can I fix this?
My website is WordPress and I have changed my php.ini
, php5.ini
and .user.ini
to all have the following text but it still fails for large files.
file_uploads = On
post_max_size = 128M
upload_max_filesize = 128M
Edit: After inspecting using phpinfo();
(should max_execution_time have an S on the end (for seconds?):
C++ code:
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;
}
Upvotes: 0
Views: 1421
Reputation: 159
I am facing this issue with cpanel and cloudflare using php and jquery when I am making POST request using Jquery and pass urls and files names data after waiting too many minutes it give timeout error. I debug and there is no complex operation on backend that take much time
if i make get request with same url it works fine
var form = new FormData();
form.append("regNo" , jsonObj.regNo);
form.append("email" , jsonObj.email);
form.append("phone" , jsonObj.phone);
form.append("file" , jsonObj.file);
form.append("url" , obj);
$.ajax({
method: "POST",
url: url,
processData:false,
contentType:false,
data: form,
success: function (data)
{
console.log(data);
}
});
at last I add enctype: 'multipart/form-data', to jquery ajax code and it works fine
$.ajax({
method: "POST",
url: url,
processData:false,
contentType:false,
enctype: 'multipart/form-data',
data: form,
success: function (data)
{
console.log(data);
}
});
Upvotes: 0
Reputation: 148
Have you tried increasing the script timeout?
http://php.net/manual/en/function.set-time-limit.php
Also are you posting files or chunks of text copy'n'pasted into a textarea or the like?
Upvotes: 1