Printable Version of Topic
Click here to view this topic in its original format
Forums > Глюкодром > C# file download через php запрос.


Posted by: Lexus on 23-04-2009, 16:00
Ситуация:
Есть сайт на котором надо логинится, толко тогда появляются линки на скачивание.

линки такого вида: ...file.php/blabla.rar

Я логинюсь на сайт, беру куки в куки контейнер.
дальше делаю:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

куки ясно прицепляю к запросу.

и на resp прога выдаёт timeout, хотя если делать request не на файл, а на любую страницу, то всё идет на ура и я получаю просто html той страницы.

Чего я не так понял в reg/res системе шарпа?

Posted by: Brait on 24-04-2009, 05:14
Какой-нибудь proxy-ёй (hint: Naviscope) либо packet sniffer-ом (hint: Iris network Traffic Analyser) глянь, возможно C# неправильно запрос формирует...

Posted by: LF_ on 24-04-2009, 05:39
есть даровый снифер - http://www.wireshark.org/ (http://www.wireshark.org/

Posted by: Set on 24-04-2009, 20:30
Может там реферер чекается для антиличивости.

Posted by: Lexus on 24-04-2009, 21:01
Покапал и выкапал. Что запрос идёт пралоьно, а не прально пашит второй запрос.
Т.е .если я делаю первым запросом логин и забираю кукисы.
Вторым запросом шлю запрос скачку и прицепляю кукисы - всё ок
и если я делаю ещё один запрос поху куда (второй файл, главная страница), то получаю timeout

Posted by: Set on 25-04-2009, 19:46
Может куки меняются?

Posted by: Lexus on 26-04-2009, 12:00
Секс продолждается. Попарившись, выяснил:
Иногда получается 2-3 запроса сделать, иногда 1-2.
Вот код:
QUOTE:
string loginData = "username=UserLogin&password=UserPass";

Uri uri = new Uri("http://testpage.de"); (http://testpage.de");
CookieContainer cookieContainer = new CookieContainer();

HttpWebRequest sessionRequest = (HttpWebRequest)WebRequest.Create(uri);
sessionRequest.CookieContainer = new CookieContainer();
cookieContainer = sessionRequest.CookieContainer;
HttpWebResponse sessionResponse = (HttpWebResponse)sessionRequest.GetResponse();
sessionResponse.Close();



// Login
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://testpage.de/login.php"); (http://testpage.de/login.php");
req.CookieContainer = cookieContainer;
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] loginDataBytes = encoding.GetBytes(loginData);
req.ContentLength = loginDataBytes.Length;
Stream stream = req.GetRequestStream();
stream.Write(loginDataBytes, 0, loginDataBytes.Length);
stream.Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();

// 2nd scratch
Encoding encodingRu = System.Text.Encoding.GetEncoding("windows-1251");
req = (HttpWebRequest)HttpWebRequest.Create(textBoxLink.Text);
req.CookieContainer = cookieContainer;
req.Method = "GET";
req.ContentType = "text/html";



res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream(), encodingRu);

inputText.Text = sr.ReadToEnd();
MessageBox.Show(res.StatusCode.ToString());
res.Close();
sr.Close();

textBoxLink.Text - с формы забирается стринг с линком.
Вся функция весит под кнопкой
Timeout выбивает всегда на красной строке

Posted by: Brait on 27-04-2009, 10:53
Стоило-бы проверить переменную textBoxLink, что в ней содержится, валидный ли URL? И еще, может стоит выдержать небольшую паузу между логином и запросом файла? А коннект логина точно закрылся? Кстати, о печенюшках: cookie после логина очень даже могли смениться...

Posted by: Lexus on 27-04-2009, 11:03
url 100% валидный, в кукас стоит что действительны до 2030 года.
Больше всего, что я не понимаю, почему то 3 то 2 запроса проходят. Ладно ни одного или хоть сколько :))

Posted by: Set on 27-04-2009, 20:51
Строку req.ContentType = "text/html"; убрать для GET.

Posted by: Lexus on 28-04-2009, 00:25
жо найдено, была по тупости два раза resзщтыу вызвана, что вешала всё дело.

Posted by: Lord KiRon on 28-04-2009, 16:57
QUOTE (Lexus @ 27-04-2009, 23:25):
жо найдено, была по тупости два раза resзщтыу вызвана, что вешала всё дело.
А по руссקи ? :diablo:

Posted by: Lexus on 28-04-2009, 20:49
QUOTE (Lord KiRon @ 28-04-2009, 15:57):
QUOTE (Lexus @ 27-04-2009, 23:25):
жо найдено, была по тупости два раза resзщтыу вызвана, что вешала всё дело.
А по руссקи ? :diablo:
Как я не навижу пунтусвичера и не могу без него :)))

response должно было стоять :)))

Posted by: Brait on 29-04-2009, 04:14
Так отключи у него автозамену. У меня он ради двух фич - переключение раскладок одним Ctrl, и история ClipBoard-а. Ну и еще иногда Shift-Break для введенного при неправильного выбранной раскладке.

Posted by: Lexus on 29-04-2009, 07:41
QUOTE (Brait @ 29-04-2009, 03:14):
Так отключи у него автозамену. У меня он ради двух фич - переключение раскладок одним Ctrl, и история ClipBoard-а. Ну и еще иногда Shift-Break для введенного при неправильного выбранной раскладке.
А я для буфера clipdiary юзаю, весчь!!!!

Как-то привык, что он сам переключает и даже иногда терплю через попность :)))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)