ПРИМЕЧАНИЕ. Я исправил проблему с пользовательским агентом, а также добавил дополнительный байт, чтобы соответствовать длине содержимого. Однако не повезло.Почему .NET Post отличается от CURL? сломана?
Я не понимаю этого. Я запустил this code ниже, а результат строки json был истек (значение недействительно).
Однако код curl выполняет то же самое и работает. Я либо получаю ожидаемую строку с URL-адресом, либо говорит, что мне нужно ждать (от нескольких секунд до 1 минуты).
Почему? В чем разница между ними? Он выглядит очень F%^& * ed, что он ведет себя по-другому (его вызывало меня ЧАСЫ проблем).
ПРИМЕЧАНИЕ. Единственный файл cookie, требуемый сайтом, является SID (проверен). Он содержит идентификатор сеанса. Первое сообщение активирует его, а вторая команда проверяет состояние с возвращаемой строкой json. Не стесняйтесь устанавливать CookieContainer только для использования SID, если хотите.
ВНИМАНИЕ: вы можете изменить SID на другое значение, чтобы другие люди не активировали его. Возможно, вы захотите запустить второй URL-адрес, чтобы убедиться, что идентификатор сеанса не используется, и говорит, что вы истекли/недействительны перед запуском.
дополнительное примечание: с curl или в вашем браузере, если вы выполняете команду POST, вы можете вставлять sid в контейнер .NET cookie, а вторая команда будет работать. Но выполнение первой команды (данные POST) не будет работать. Эта функция сообщения, которую я использовал для многих других сайтов, которые требуют сообщения, и пока это сработало. Очевидно, проверка метода - это большая сделка, и я вижу, что это действительно POST при выполнении первой команды.
static void Main(string[] args)
{
var cookie = new CookieContainer();
PostData("http://uploading.com/files/get/37e36ed8/", "action=second_page&file_id=9134949&code=37e36ed8", cookie);
Thread.Sleep(4000);
var res = PostData("http://uploading.com/files/get/?JsHttpRequest=12719362769080-xml&action=get_link&file_id=9134949&code=37e36ed8&pass=undefined",
null/*this makes it GET*/, cookie);
Console.WriteLine(res);
/*
curl -b "SID=37468830" -A "DUMMY_User_Aggent" -d "action=second_page&file_id=9134949&code=37e36ed8" "http://uploading.com/files/get/37e36ed8/"
curl -b "SID=37468830" -A "DUMMY_User_Aggent" "http://uploading.com/files/get/?JsHttpRequest=12719362769080-xml&action=get_link&file_id=9134949&code=37e36ed8&pass=undefined"
*/
}
Я сыт по горло клиентами HttpWebRequest/.NET htto. Я сделал это с помощью curl (узнав, как настроить его на .NET и обновить). Я делал это просто и быстро, и он работал. Нет глупых проблем.
Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL);
var curl = new Easy();
curl.SetOpt(CURLoption.CURLOPT_USERAGENT, "DUMMY_User_Aggent");
curl.SetOpt(CURLoption.CURLOPT_COOKIE, "SID=4385743");
curl.SetOpt(CURLoption.CURLOPT_POSTFIELDS, "action=second_page&file_id=9134949&code=37e36ed8");
curl.SetOpt(CURLoption.CURLOPT_URL, "http://uploading.com/files/get/37e36ed8/");
curl.Perform();
curl.SetOpt(CURLoption.CURLOPT_POST, 0);
Easy.WriteFunction wf = new Easy.WriteFunction(OnWriteData);
curl.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf);
curl.SetOpt(CURLoption.CURLOPT_URL, "http://uploading.com/files/get/?JsHttpRequest=12719362769080-xml&action=get_link&file_id=9134949&code=37e36ed8&pass=undefined");
curl.Perform();
curl.Cleanup();
Curl.GlobalCleanup();
Пробовал ли вы отправить запрос с обоими на свой сервер и распечатать результаты/используя что-то вроде wirehark/ethereal/network analyzer? – tstenner
Мне любопытно, что нужно 4-секундная задержка, и если это может вызвать проблему. – NebuSoft
@tstenner: Я провел его через фиктивную страницу, которая выводит заголовок. Я замечаю 2 вещи, длина контента +1 с CURL (я предполагаю, что она включает в себя null), и пользовательский агент не появляется даже после того, как я его установил. Thats большой WTF – user261192