Пробую логинится на сайт вебмани в итоге получаю ошибку: HTTP/1.1 302 Found Редирект подключен, переменные парсит правильно SSL тоже подключен, непонятно в чем причина :-( Код логина: PHP: TStringList*post = new TStringList(); post->Add("&__LASTFOCUS=");//+LF); post->Add("&__EVENTTARGET=");//+ET); post->Add("&__EVENTARGUMENT=");//+EA); post->Add("&__LBD_VCT="+LV); post->Add("&__LBD_SGC_login_ctl00_cph_captcha_captcha=0");//+LC); post->Add("&__VIEWSTATE="+VS); post->Add("&__EVENTVALIDATION="+EV); post->Add("&search=Найти информацию"); post->Add("&ctl00$cph$ddlAuthMethod=Логина и пароля"); post->Add("&ctl00$cph$tbLogin="+Edit1->Text); post->Add("&ctl00$cph$tbPassword="+Edit2->Text); post->Add("&ctl00$cph$Captcha$tbCaptcha="+CapKEY); post->Add("&ctl00$cph$btnSubmit=Войти"); try{ result = http->Post("https://my.webmoney.ru/login.aspx?ReturnUrl=/dashboard.aspx", post); Memo1->Lines->Add(result+"/n/n/n/n"); Memo1->Lines->AddStrings(post); } catch(...){ Memo1->Lines->Add(http->ResponseText); //http->ResponseText; }
302 - это не ошибка, это просто код ответа тебе из ответа нужно вытащить Location и сделать запрос по этому адресу. А если ты юзаешь Indy, то Code: HTTP.HandleRedirects:=True; спасет тебя, и ручками делать ничего не прийдется
так я так и делаю PHP: TMemoryStream*cap = new TMemoryStream(); TIdHTTP*http = new TIdHTTP(NULL); TIdSSLIOHandlerSocketOpenSSL*ssl = new TIdSSLIOHandlerSocketOpenSSL(NULL); http->HandleRedirects = true; http->AllowCookies=true; http->IOHandler = ssl; http->Request->UserAgent="Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2"; http->Request->Referer="https://my.webmoney.ru/login.aspx"; но все равно вылазит HTTP/1.1 302 Found
Хе, а знаки вопроса вместо полей в запросе ты считаешь нормальными? Или а) вместо MultiPartFormDataStream используй StringList б) вместо строк-значений в MultiPartFormDataStream используй TStringStream P.S. а 302 у тебя вылазит в IDE ведь? Скомпиль проект и запусти Exe-шник, по идее Exception через try..catch не вылезет P.P.S. а чтобы вместо капчи получать не левые знаки, а русские (как я понимаю) буквы, нужно код переделать в Recognize антигейта примерно так (Delphi т.к. в С не силен) Code: S:tstringStream; res:string; HTTP.Get(url,s); res:=s.DataString;
если стринг лист то запрос выгладит так: Хотя в нем указаны все параметры: как раз капча проходит она числовая
10-й. Писал на 7-м то отказывался работать с ssl то не капча а строки post->Add("&search=Найти информацию"); post->Add("&ctl00$cph$ddlAuthMethod=Логина и пароля"); с русскими символами. это не проблема. непонятно чего посылает кривой пост запрос.. Писал брут ICQ на этом же инди тоже отправлялся запрос на авторизацию с ssl отправляло норм
а, чьерт не обратил внимания, что SSL соедниение. Тогда то, что в снифере неверно показываются поля это нормально... на то оно и шифрованное соединение! P.S. Честно - не знаю, но мне кажется дело как раз в этих вопросах...