Здравствуйте. Сижу на бирже фл.ру и временами делаю несложные заказы, когда студенты активизируются к сессии. Дак вот, попался один, на GET и POST запросы. Ну я почитал это дело, сделал. Решил закрепить. Решил протестировать прям на этой бирже просто загрузку картинки для работы. И тут возникла проблема, которую не могу пока решить. Может кто натолкнет на нужную мысль. Теперь к делу.
Логика следующая. Чтобы загрузить работу, нужно пройти авторизацию. Чтобы пройти авторизацию, нужно до нее выдернуть значение одно значение с исходного кода страницы GET запросом
, который вернет 200 ответ. Так называемый
Проблем не возникло, параметр беру. Еще нужно выдернуть две куки, которые возвращает ответ, это
Тоже проблем не возникло. Теперь могу перейти к авторизации. Шлю POST запрос
Код:
https://www.fl.ru/login/
с необходимыми параметрами для авторизации, это
Код:
Логин в открытом виде
Пароль в открытом виде
u_token_key
+куки в заголовке запроса PHPSESSID и pda
Все норм. Приходит ответ 302, но это норм. Этот ответ дает нам еще 4 нужных куки
Код:
ue_sso_token
id
name
pwd
Ну ниче страшного, добавляем их к ранее найденым кукам. Все компоненты в сборе. Для теста посмотрю страницу с настройками, который неавторизованному пользователю закрыт. Выполняю GET запрос
Код:
https://www.fl.ru/users/ТУТ_ЛОГИН/setup/main/
, все норм, данные в ответе идут верные.
Далее делаю POST запрос
Код:
https://www.fl.ru/xajax/commune.server.php
на открытие формы "Добавить работу" с параметрами
Код:
xjxr это время UTC с 1970 года количество секунд
xjxargs это запись "<xjxobj><e><k>id</k><v>N0</v></e><e><k>prof_id</k><v>N27</v></e></xjxobj>" в экранированном виде
xjxargs еще раз со звездочкой
u_token_key
xjxfun это значит константа
Все хорошо, приходит ответ 200. Ну по присылаемому в ответе исходному коду страницы могу убедиться что она действительно открылась.
А далее не могу понять сути. Судя по HTTP Analyzer запрос на добавление картинки идет сюда
Код:
https://www.fl.ru/uploader.php
Но у меня на этом месте
софт зависает, далее пишет что
время ожидания истекло, при этом вообще запрос не отправляется.
Заголовки старался взять из снефера. Вот пример загрузки из снифера
Код:
POST /uploader.php HTTP/1.1
Host: www.fl.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0
Accept: */*
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
X-Requested-With: XMLHttpRequest
Cache-Control: no-cache
Referer: https://www.fl.ru/users/ТУТ_ЛОГИН/
Content-Type: multipart/form-data; boundary=---------------------------183511188914743
Cookie: pda=0; _ga=GA1.2.746312634.1496481799; _ym_uid=1496481799723411287; _gid=GA1.2.1437771583.1505460645; new_pf0=1; new_pf10=1; hidetopprjlenta=0; cover_preview_close=1; _ym_isad=2; PHPSESSID=nl6028oone1nb8httmip43sgn7; _ga_cid=746312634.1496481799; _ym_visorc_6051055=w; ue_sso_token=DdrQKpqV5NmZjfJF0l%252FzNgSBIOWn8s3BB5cWDcFBbeUrtMVxVhPTpf4b3OZ%252FHqYH7QmfhX7CaOAftx2lc5bL8SsT4pik0e3uNQzIfsT7NbwuctN8ymabQutAaSPB40DPQAVLFmevw71NeXhe4EMu6l99QX2MiPWALdLZXzU8LMwCd%252FdO9gvMF9V58od7BUaqaKqaXViuoXOugsfBPO2TsA%253D%253D; id=1754693; name=ТУТ_ЛОГИН; pwd=d2228771848f8aa04da9ad6eab27a73b; _gat=1
Connection: keep-alive
Accept-Encoding: gzip, deflate
Content-Length: 17728
-----------------------------183511188914743
Content-Disposition: form-data; name="resource"
fe409-7d610-826bf1b-pf_preview
-----------------------------183511188914743
Content-Disposition: form-data; name="action"
create
-----------------------------183511188914743
Content-Disposition: form-data; name="u_token_key"
cc5036402aa6ecd10aa088fee43b6035
-----------------------------183511188914743
Content-Disposition: form-data; name="qquuid"
84b-a049
-----------------------------183511188914743
Content-Disposition: form-data; name="qqtotalfilesize"
16941
-----------------------------183511188914743
Content-Disposition: form-data; name="qqfile"; filename="f_08258fdfe4806b4e.png"
Content-Type: image/png
‰PNG
IHDR И И *X®ћ pHYs Д Д•+ IDATxњнЅypЧ}пын™ћ}ЯЂ™Б`Я Ip)QEQ»DYЉ_[ЧЋ|ЅД±Јз©*‰^Х}©[·nЩI]ї8П%З±ќЕk”X»dнЕ}'‚Ш—іпыLПњчGП4+АЂ`ЄPдфtџ>УЭЯ>їЯ9зч;!<«Пoы†МЃdЄ@ 3 # mбO @
....................тут много буковок....................
ЅўЗjRќЇ2©6х8ЕZГdЌшп?эШ*@
@™hў* ( ЕA™< *R ‰ю| \ њ ¦ ШЊюПoЯГa
шя:N? aњ>/ IEND®B`‚
-----------------------------183511188914743--
Собственно, как мне отправить правильно запрос на загрузку картинки???? Вот как это стоит у меня сейчас
Код:
//-----------------------------------POST----------------------------------------------------------------------//
request = (HttpWebRequest)HttpWebRequest.Create("https://www.fl.ru/uploader.php");// POST на загрузку файла превью
request.Method = "POST";
request.Host = "www.fl.ru";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0";
request.Accept = "*/*";
request.Headers.Add("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
request.Headers.Add("X-Requested-With", "XMLHttpRequest");
request.Headers.Add("Cache-Control", "no-cache");
request.Referer = "https://www.fl.ru/users/" + login + "/";
string boundary = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).Ticks.ToString();
//request.ContentType = "multipart/form-data; boundary=---------------------------" + boundary;
request.ContentType = "multipart/form-data; boundary=---------------------------179001590319553";
request.Headers.Add(HttpRequestHeader.Cookie, sCookies); //куки+
request.Headers.Add("Accept-Encoding", "gzip, deflate");
buffer = Encoding.Default.GetBytes("-----------------------------179001590319553\nContent-Disposition: form-data; name=\"resource\"\n\n434af-e3642-97f9c0b-pf_preview\n-----------------------------179001590319553\nContent-Disposition: form-data; name=\"action\"\n\ncreate\n-----------------------------179001590319553\nContent-Disposition: form-data; name=\"u_token_key\"\n\nac8d30bafed1df543bf49b2971edfed1\n-----------------------------179001590319553\nContent-Disposition: form-data; name=\"qquuid\"\n\nbd4-ae4b\n-----------------------------179001590319553\nContent-Disposition: form-data; name=\"qqtotalfilesize\"\n\n17531\n-----------------------------179001590319553\nContent-Disposition: form-data; name=\"qqfile\"; filename=\"f_01658fdfa4d05dd4.png\"\nContent-Type: image/png\n\n" + file_string + "\n-----------------------------179001590319553\n");
request.ContentLength = buffer.Length;
request.GetRequestStream().Write(buffer, 0, buffer.Length); // НА ЭТОМ МЕСТЕ ЗАВИСАЕТ!!!
response = (HttpWebResponse)request.GetResponse(); // POST на загрузку файла превью
//---------------------------------------------------------------------------------------------------------//
Как мне правильно сформировать запрос?