Нужно автоматизировать процесс загрузки видео по ссылке: 1.Авторизируюсь и сохранию cookies(только вроде как куки не сохраняются ) Code: req = (HttpWebRequest)HttpWebRequest.Create("http://www.24video.net/auth/login"); req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; WebMoney Advisor; MRA 5.3 (build 02560); MRSPUTNIK 2, 0, 1, 54 SW; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"; req.Accept = "image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"; req.Headers.Add("Accept-Language", "ru"); req.Method = "POST"; //---------------------------- req.CookieContainer = cookieContainer; req.AllowAutoRedirect = false; // Важный пункт req.ContentType = "application/x-www-form-urlencoded"; byte[] SomeBytes = null; string FormParams = "username=Tester&password=tester"; SomeBytes = Encoding.UTF8.GetBytes(FormParams); req.ContentLength = SomeBytes.Length; Stream newStream = req.GetRequestStream(); newStream.Write(SomeBytes, 0, SomeBytes.Length); result = (HttpWebResponse)req.GetResponse(); cookieVal = result.GetResponseHeader("Set-Cookie"); // забираем куки req.Headers.Add(HttpRequestHeader.Cookie, cookieVal); ReceiveStream = result.GetResponseStream(); sr = new StreamReader(ReceiveStream, encode); answer = sr.ReadToEnd(); 2.Получаю id своего видео(это нужно обязательно, инеаче видео не залить) Code: req = (HttpWebRequest)HttpWebRequest.Create("http://upload.24video.net/video/generateIdentifier"); req.Method = "POST"; HttpWebResponse myHttpWebResponse = (HttpWebResponse)req.GetResponse(); StreamReader myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.UTF8); id = Convert.ToInt32(myStreamReader.ReadToEnd()); 3.Отправляю запрос на загрузку видео Code: req = (HttpWebRequest)HttpWebRequest.Create("http://upload.24video.net/video/uploadUrl?X-Progress-ID=" + id); req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; WebMoney Advisor; MRA 5.3 (build 02560); MRSPUTNIK 2, 0, 1, 54 SW; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"; req.Accept = "image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"; req.Headers.Add("Accept-Language", "ru"); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; byte[] SomeBytes1 = null; //это видео я взял для примера string FormParams1 = "uploadUrl=http%3A%2F%2Fdownload.youporn.com%2Fdownload%2F1392366%2Fflv%2F450913_Orgy_sex_party_everyone_fucking.flv"; SomeBytes1 = Encoding.UTF8.GetBytes(FormParams1); req.ContentLength = SomeBytes1.Length; Stream newStream1 = req.GetRequestStream(); newStream1.Write(SomeBytes1, 0, SomeBytes1.Length); newStream1.Close(); myHttpWebResponse = (HttpWebResponse)req.GetResponse(); myStreamReader = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.UTF8); //выводим и смотрим что нам ответил серв textBox2.Text += answer; textBox1.Text += id; Ответы сервера: 1. {"result":true,"info":"Tester","adult":true} 2. 1094550(например, так как эта переменная увеличивается с каждым разом) 3.QUICK_SUCCESS 4.Потом как бы должен пойти процесс загрузки но этого не происходит. И помоему он куки не сохраняет. Как правильно авторизироваться? p.s. сорри за кривой код
Не знаю как насчет загрузки по ссылке, но при загрузке из файла еще четвертый запрос есть: PHP: POST http://upload.24video.net/video/saveMovie movieName= [НАЗВАНИЕ] &movieTags= [ТЭГИ] &movieDesc= [ОПИСАНИЕ] &movieTheme= [ТЕМА] &mode=file&X-Progress-ID= [ID] &originalName= [НАЗВАНИЕ_ФАЙЛА] Ответ возвращает такой же, как и третий запрос
Там понимаешь такая мура получается: 1.логинишься 2.получаешь ид видео 3.загружаешь видео 4.только потом разрешается отсылать запрос на название описание и т.д. вроде так, если не так поправьте... Я тут всем чем можно снифал и вот результат: под четвертым пунктом скрывается сам результат загрузки: запрос get: Code: GET /video/uploadInfoInternal?_dc=[COLOR=Red]1283802887109[/COLOR]&cancelled=false&X-Progress-ID=[COLOR=Green]1096285 [/COLOR]HTTP/1.1 Ответ Code: {"received":1954136,"size":8882966,"state":"uploading","error":null} запрос get: Code: GET /video/uploadInfoInternal?_dc=1283802892250&cancelled=false&X-Progress-ID=1096285 HTTP/1.1 Ответ Code: {"received":4457992,"size":8882966,"state":"uploading","error":null} Ну и т.д. пока оно полностью не загрузится: Code: GET /video/uploadInfoInternal?_dc=1283802933312&cancelled=false&X-Progress-ID=1096285 HTTP/1.1 ответ Code: {"received":8341000,"size":8882966,"state":"done","error":null} Вот так 1096285 -это понятно это id видео 1283802887109 - а вот это что за лажа не совсем понятно И вообще эти гет запросы формировать мне? Или это сервер отвечает? если-бы это ответ говорит что видео только готово к загрузке.
Да, но если пришел ответ SUCCESS после запроса 3, то видео загружено и отправляешь следующий запрос. upd: попробуй JS и плагины отключить в браузере и залить видео
Значит загрузка по ссылке отличается от загрузки из файла. Сделай в цикле проверку состояния загрузки, пока не будет "state":"done". Идентификатор загружаемого видео у тебя есть.
Code: GET /video/uploadInfoInternal?_dc=[COLOR=Red][SIZE=3]1283802887109[/SIZE][/COLOR]&cancelled=false&X-Progress-ID=1096285 Вот она и загвоздка... Тут непонятно откуда параметр _dc берется Такое ощущение что это переменная определяет общее количество байт(килобайт) загруженных на сервер Для просмотра данной страницы необходимо включить JavaScript
нашел интересненькое: PHP: http://www.24video.net/js/utils.js особенно вот: Code: var V24 = {}; // global namespace var MAX_MOVIE_NAME_LENGTH = 45; var MAX_MOVIE_DESC_LENGTH = 255; var WORD_REGEXP = new RegExp("<(.*?)>|&[a-z]+;|[\.,:;\"\']+", "g"); var SPACE_REGEXP = new RegExp("\\s+", "g"); var MAX_WORD_LENGTH = 60; var filterProps = {}; var inputValues = {}; var base64fields = []; if (!String.prototype.trim) { String.prototype.trim = function() { return this.replace(/^\s*/, "").replace(/\s*$/, ""); }; } if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(item, i) { i || (i = 0); var length = this.length; if (i < 0) { i = length + i; } for (; i < length; i++) { if (this[i] === item) { return i; } } return -1; }; } function checkExist(obj) { return !(obj == undefined || !obj); } function logToConsole(str) { if (typeof(console) == "object") { console.log(str); } } function calculateLink(href, values, addAll) { if (values == null) { values = {}; } if (parseUri(href).path == parseUri(document.location.href).path) { var scrollx = getScrollX(); var scrolly = getScrollY(); if (scrollx) { values.scrollx = scrollx; } if (scrolly) { values.scrolly = scrolly; } } return calculateLinkInternal(href, values, addAll); } function calculateLinkInternal(href, values, addAll) { /** * @type {Array} */ var parts = href.split('?'); /** * @type {Array} */ var paramsArray = new Array(); /** * @type {Array} */ var addedArray = new Array(); if (parts.length > 1) { /** * @type {Array} */ var params = parts[1].split('&'); for (var i = 0; i < params.length; i++) { /** * @type {Array} */ var pair = params[i].split('='); var key = pair[0]; addValue(paramsArray, key, pair[1], addAll); addedArray.push(key); } } for (var key in values) { if (addedArray.indexOf(key) < 0) { addValue(paramsArray, key, values[key], addAll); } } href = parts[0]; for (var i = 0; i < paramsArray.length; i++) { href += (i == 0 ? '?' : '&'); href += (paramsArray[i].key + '=' + paramsArray[i].value); } return href; } function parseParams(href) { var parts = href.split('?'); var result = {}; if (parts.length > 1) { /** * @type {Array} */ var params = parts[1].split('&'); for (var i = 0; i < params.length; i++) { /** * @type {Array} */ var pair = params[i].split('='); result[pair[0]] = (base64fields.indexOf(pair[0]) != -1) ? Base64.decode(decodeURIComponent(pair[1])) : decodeURIComponent(pair[1]); } } return result; } function addValue(paramsArray, key, value, addAll) { if (addAll || (value != filterProps[key])) { paramsArray.push( { key: key, value: value }); } } вроде здесь формируется параметр _dc? у кого есть какие предложения?