IdHttp: ошибка 10053 при отправке логина
Независимо от того, что я делаю или пытаюсь, я получаю сообщение об ошибке 10053 при отправке сообщения для входа на сайт. Я использую приведенный ниже код для отправки параметров сообщения для входа, которые вы также можете видеть, он имеет VerificationCode
который я должен сначала извлечь из страницы входа в систему, и я делаю и заменить на предыдущее значение
После отправки поста получаю ошибку 10053 (software caused connection abort
) и http анализатор показывает <Request is not completed. waiting...>
Мой код:
mIdHttp := TIdHTTP.Create(nil);
mIdHttp.AllowCookies := true;
mIdHttp.HandleRedirects := true;
mIdHttp.Request.Charset := 'utf-8';
mIdHttp.ConnectTimeout := 2000000;
// Headers, all values are what Http Analyzer shows
mIdHttp.Request.Host := 'apps.somesite.com';
mIdHttp.Request.Connection := 'keep-alive';
mIdHttp.Request.CacheControl := 'max-age=0';
mIdHttp.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48';
mIdHttp.Request.ContentType := 'application/x-www-form-urlencoded';
mIdHttp.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8';
mIdHttp.Request.Referer := 'https://apps.somesite.com/Login';
mIdHttp.Request.AcceptEncoding := 'gzip, deflate, lzma, br';
mIdHttp.Request.AcceptLanguage := 'en-US,en;q=0.8';
mIdHttp.Request.ContentLength := 195;
// Extracting __RequestVerificationToken from login page
rvt := getRequestVerificationToken();
// prepare request
request.add('__RequestVerificationToken=' + rvt);
request.add('UserName=someUsername');
request.add('Password=somePassword');
request.add('RememberMe=false');
// sending login post
URL := 'https://apps.somesite.com/Login';
// Error Happens At The Post Below
mIdHttp.post(URL, request, responseCode);
Вот анализатор Http post paramters
:
Parameter Name Value
__RequestVerificationToken h_9onTJNqodkc0hVa5_VVAAa0izMb9zDdVeO5hDkciunk-3I2u7PpS8OPQe-puloMo7GRtI4iwMwezU3Nv70Wk2olccJK7MbuhgPWAGGFbM1
UserName someUsername
Password somePassword
RememberMe false
За исключением адреса сайта (которым я не могу поделиться по соображениям конфиденциальности), пожалуйста, сообщите, если вам нужна дополнительная информация или мне нужно что-то проверить, я пытался изменить все виды параметров idHttp, о которых я мог думать в течение последних 3 дней, и я всегда получаю ту же ошибку
Обратите внимание: я должен упомянуть одну вещь: если включена программа Http Analyzer и я запускаю свою программу, вместо 10053 я получаю 10054 ~! но без всякого вмешательства я всегда получаю 10053.
Изменить 1:
снимок экрана с заголовком сообщения, отправляемого при входе в систему с помощью браузера
снимок экрана с заголовком сообщения, которое отправляется при попытке войти с помощью idHttp.post()
2 ответа
Попробуйте добавить в свой код это:
include(idhttp1.HTTPOptions,[hoKeepOrigProtocol]);
Может быть, вы находитесь за прокси. Когда за прокси, IdHTTP должен сначала подключиться к прокси. Он отключается и выдает ошибку EIdConnClosedGracefully. Тогда вы подключены и можете опубликовать свой запрос.
Пожалуйста, попробуйте это:
mIdHttp.ProxyParams.ProxyServer := ProxyServerURL;
mIdHttp.ProxyParams.ProxyPort := 80;
// if your proxy requires authentication, provide the login and password, else set BasicAuthentication to false.
mIdHttp.ProxyParams.BasicAuthentication := true;
mIdHTTP.ProxyParams.ProxyUserName := proxylogin;
mIdHTTP.ProxyParams.ProxyPassword := proxypwd;
try
TATDIdHttpUtility.post(mIdHttp, URL, request).rawResponseCode.SaveToFile('responseCode0.txt');
except
on E: EIdConnClosedGracefully do
begin
TATDIdHttpUtility.post(mIdHttp, URL, request).rawResponseCode.SaveToFile('responseCode0.txt');
end;
end;