Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

отправка post c libcurlNet в C#

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> отправка post c libcurlNet в C#
Имя
Сообщение << Старые топики   Новые топики >>
отправка post c libcurlNet в C# - 2010-03-21 00:44:13.276666   
dOver

Сообщений: 140
Оценки: 0
Присоединился: 2007-03-31 04:41:56.070000
Никак не могу залогиниться через программу на C#. Есть класс:
using SeasideResearch.LibCurlNet; using System.IO; class HTTP { &nbsp;&nbsp;&nbsp; private static Easy easy; &nbsp;&nbsp;&nbsp; private static Random rand = new Random(); &nbsp;&nbsp;&nbsp; private static string SockBuff; &nbsp;&nbsp;&nbsp; private static string CookieFile = AppDomain.CurrentDomain.BaseDirectory + "cookie" + rand.Next(0, 9) + rand.Next(0, 9) + rand.Next(0, 9) + rand.Next(0, 9) + rand.Next(0, 9) + rand.Next(0, 9) + rand.Next(0, 9) + ".txt"; &nbsp;&nbsp;&nbsp; public static string UserAgent = "Mozilla 5.0"; &nbsp;&nbsp;&nbsp; public static string Proxy = ""; &nbsp;&nbsp;&nbsp; public string referer = ""; &nbsp;&nbsp;&nbsp; public void Dispose() &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClearCookies(); &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; public string getCookieFile() &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return CookieFile; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; public void CurlInit() &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL); &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; public void ClearCookies() &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (File.Exists(CookieFile)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File.Delete(CookieFile); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; public string HTTPGet(string URL, string Proxy) &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy = new Easy(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SockBuff = ""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Easy.WriteFunction wf = new Easy.WriteFunction(OnWriteData); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_URL, URL); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_TIMEOUT, "60"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_USERAGENT, UserAgent); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_COOKIEFILE, CookieFile); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_COOKIEJAR, CookieFile); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_FOLLOWLOCATION, true); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (URL.Contains("https")) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_SSL_VERIFYHOST, 1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_SSL_VERIFYPEER, 0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Proxy != "") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_PROXY, Proxy); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_PROXYTYPE, CURLproxyType.CURLPROXY_HTTP); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.Perform(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.Cleanup(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("Get Request Error"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return SockBuff; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; public string HTTPPost(string URL, string Content, string Proxy) &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy = new Easy(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SockBuff = ""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Easy.WriteFunction wf = new Easy.WriteFunction(OnWriteData); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_URL, URL); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_TIMEOUT, "60"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_USERAGENT, UserAgent); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_COOKIEFILE, CookieFile); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_COOKIEJAR, CookieFile); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //easy.SetOpt(CURLoption.CURLOPT_HTTPHEADER &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_REFERER, referer); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //easy.SetOpt(CURLoption.CURLOPT_POSTFIELDSIZE, Content.Length); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_FOLLOWLOCATION, true); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //easy.SetOpt(CURLoption.CURLOPT_HTTPHEADER, 1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_POST, true); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_POSTFIELDS, Content); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (URL.Contains("https")) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_SSL_VERIFYHOST, 1); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_SSL_VERIFYPEER, 0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Proxy != "") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_PROXY, Proxy); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.SetOpt(CURLoption.CURLOPT_PROXYTYPE, CURLproxyType.CURLPROXY_HTTP); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.Perform(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; easy.Cleanup(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return SockBuff; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; public string SafeString(string data) &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Curl.Escape(data, data.Length); &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; public string UnSafeString(string data) &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Curl.Unescape(data, data.Length); &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; public static Int32 OnWriteData(Byte[] buf, Int32 size, Int32 nmemb, Object extraData) &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Console.Write(System.Text.Encoding.UTF8.GetString(buf)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SockBuff = SockBuff + System.Text.Encoding.UTF8.GetString(buf); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return size * nmemb; &nbsp;&nbsp;&nbsp; } }
 На нажатие кнопки пишу код:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string response; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string sUrl = "http://lockerz.com/auth/login"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HTTP http = new HTTP(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http.CurlInit(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http.referer = "http://lockerz.com/"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response = http.HTTPPost(sUrl, "remember+me=on&amp;handle=myemail%40gmail.com&amp;password=mypass", ""); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; textBox1.Text += response; Так вот на моем тестовом сервере успешно логинюсь и получаю страницу для залогиненных. А на этом, lockerz.com, не хочет. Все время возвращает страницу с формой логина. Может там из-за кодирования. Там стоит чекбокс с именем "remember me". Я отснифал, на сервер передается как "remember+me", ну и е-майл собаку кодирует как "%40". И куки ставит. Я их в файл сохраняю, файл создается.
 В чем может быть проблема? Может из-за куков? У меня на своем через сессию, а здесь куки. Хелп!
Post #: 1
RE: отправка post c libcurlNet в C# - 2010-03-21 01:24:41.940000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Всё может быть. Сниффер в руки и сравнивай, что твоя прога отправляет и что браузер делает.
Post #: 2
RE: отправка post c libcurlNet в C# - 2010-03-21 03:15:16.843333   
dOver

Сообщений: 140
Оценки: 0
Присоединился: 2007-03-31 04:41:56.070000
В том-то и дело, что не знаю, что и сравнивать. Вот, что сниффер перехватил (куки и пароли поменял):
POST /auth/login HTTP/1.1 Host: www.lockerz.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 WebMoney Advisor Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Referer: http://www.lockerz.com/ Cookie: __utma=275***34.444****4552.12*****11.12****61.12*****12.40; __utmz=27****25.12****0.7.2.utmcsr=userscripts.org|utmccn=(referral)|utmcmd=referral|utmcct=/topics/43513; __utmc=27***25; __utmb=27****25.3.10.12****12; lockerz=UT9Xmycookie%3D Content-Type: application/x-www-form-urlencoded Content-Length: 59 remember+me=on&amp;handle=myemail%40gmail.com&amp;password=mypass HTTP/1.1 302 Found Server: nginx/0.8.8 Date: Sat, 20 Mar 2010 23:39:51 GMT Content-Type: text/html Connection: keep-alive Set-Cookie: lockerz=...my_cookie...; path=/ Set-Cookie: lockerz=....my_cookie3_here...; path=/ Set-Cookie: lockerz=...my_cookie3_here...%3D%3D; path=/ Location: http://www.lockerz.com/myLocker Content-Length: 0 Строкой "Location: http://www.lockerz.com/myLocker" он должен перебросить меня на эту страницу. Директива для этого у меня прописана. А он меня не перебрасывает. Куки должен автоматом читать из файла директивой CURLoption.CURLOPT_COOKIEJAR, насколько я понял. Я отсылаю запрос командой:
response = http.HTTPPost(sUrl, "remember+me=on&handle=myemail%40gmail.com&password=mypass", "");
Капчи, соли и хиден полей нету, только чекбокс, 2 инпута и сабмит.
Да, еще. Как послать ajax-запрос через эту либу? Чтоб в заголовке был "X-Requested-With: XMLHttpRequest"?
Мне это тоже скоро понадобится.

Post #: 3
RE: отправка post c libcurlNet в C# - 2010-03-21 17:00:59.893333   
dOver

Сообщений: 140
Оценки: 0
Присоединился: 2007-03-31 04:41:56.070000
В общем, отснифал заголовки с моей программы. Оказалось, что не передаются куки. То, что в файл куки записывает, совсем не те, что браузер передает. В файле больше на сессию похоже.
Почему не устанавливаются куки? На другом сайте пробовал, где тоже куки, вообще ничего не возвращает.
Главный хедер возращает "HTTP/1.1 301 Moved Permanently" и дальше перебрасывает на глвную.
Что я не так делаю?
Post #: 4
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> отправка post c libcurlNet в C#







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.