C# Vbulletin Login Fonksiyonu.
-
Merhaba arkadaşlarlar.
Vbulletin forumuma C# ile login olmak istiyorum. ve bu loginden geriye değer döndürmek istiyorum. aşağıdaki kodu kendim yazdım. ama geri dönen değerde giriş yapmadığı anlaşılıyor. yardımcı olabilir bilir misiniz hata nerde ?
Not : MD5Sifrele( fonksiyonu md5 üretiyor);
public string LoginBitirim(string Userx, string Passx) { WebClient wb_ = new WebClient(); byte[] login = wb_.UploadData("http://www.ornekvbuletinforumu.com/login.php?do=login", "POST", System.Text.Encoding.ASCII.GetBytes("vb_login_username="+Userx+"&vb_login_password=&submit.x=14&submit.y=17&s=&securitytoken=guest&do=login&vb_login_md5password="+MD5Sifrele(Passx)+"&vb_login_md5password_utf="+MD5Sifrele(Passx))); string geriDonen = Encoding.UTF8.GetString(login); return geriDonen; } -
Şunu dener misin ?
static void Main(string[] args) { string cookie = login("Domain/login.php?do=login", "username", "password"); Console.Write(cookie); Console.Read(); } static string login(string url, string username, string password) { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); string cookie = ""; string values = "vb_login_username=" + username + "&vb_login_password=" + password + "securitytoken=guest&" + "cookieuser=checked&" + "do=login"; req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = values.Length; CookieContainer a = new CookieContainer(); req.CookieContainer = a; System.Net.ServicePointManager.Expect100Continue = false; using (StreamWriter writer = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII)) { writer.Write(values); } HttpWebResponse c = (HttpWebResponse)req.GetResponse(); foreach (Cookie cook in c.Cookies) { cookie = cookie + cook.ToString() + ";"; } return cookie; }
FCN tarafından 31/Tem/14 20:11 tarihinde düzenlenmiştir -
curl ile daha kolay login olabilirsin login olduktan sonra cookie degerini alman gerek
ornek http://pastebin.com/3ujJNvwq
ustura tarafından 31/Tem/14 20:19 tarihinde düzenlenmiştir -
ustura php değil :)
FCN cookie geri dönen değer :) login olup olmadığımı anlamadım :D
yaw delphiye dönmek istemiyorum :(
DuPi tarafından 31/Tem/14 20:48 tarihinde düzenlenmiştir -
1 kez up yapayım.
-
hocam cookie de kullanici kodu veya kullanici adi geliyorsa login olmustur yanlismi dusunuyorum ?
-
haklısında lastvisit 0 dönüyor.
-
DuPi bunu yazdı
haklısında lastvisit 0 dönüyor.
hocam curl kullanarak c# ile daha kolay login olabilirsin c# ile sadece kullanıcı adı sifreyi post ediceksin curl uzerinden login olacaksın curl kopru gibi dusun :)
-
dün zamanım yoktu bakamamıştım. Bugün kodu biraz editledim ve denedim sorunsuz çalışıyor olması lazım.
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Web; using System.Net; using System.Net.Http; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var postParams = new[] { new HttpParam("vb_login_username", "KullanıcıAdı"), new HttpParam("cookieuser", "1"), new HttpParam("vb_login_password", "SİFRE"), new HttpParam("securitytoken", "guest"), new HttpParam("do", "login"), }; string url = "http://DOMAIN/login.php?do=login"; var container = new CookieContainer(); var buffer = Encoding.UTF8.GetBytes(GetQueryString(postParams)); var request = (HttpWebRequest)HttpWebRequest.Create(url); request.CookieContainer = container; request.UserAgent = "Mozilla/5.0"; request.Method = "POST"; request.KeepAlive = true; request.AllowAutoRedirect = true; request.CookieContainer = container; request.ContentLength = buffer.Length; request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; request.AllowAutoRedirect = true; using (var requestStream = request.GetRequestStream()) requestStream.Write(buffer, 0, buffer.Length); using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { request = (HttpWebRequest)HttpWebRequest.Create("http://DOMAIN"); //Login olduktan sonra anasayfaya geri dönüyoruz request.CookieContainer = container; //cookieleri unutmayalım HttpWebResponse response2 = (HttpWebResponse)request.GetResponse(); if (response2.StatusCode == HttpStatusCode.OK || response2.StatusCode == HttpStatusCode.NotModified) { using (var reader = new StreamReader(response2.GetResponseStream())) { var result = reader.ReadToEnd(); MessageBox.Show(result); } } } } public struct HttpParam { private string _key; private string _value; public string Key { get { return HttpUtility.UrlEncode(_key); } set { _key = value; } } public string Value { get { return HttpUtility.UrlEncode(_value); } set { _value = value; } } public HttpParam(string key, string value) { _key = key; _value = value; } public override string ToString() { return string.Format("{0}={1}", Key, Value); } } private static string GetQueryString(HttpParam[] args) { return args != null ? string.Join("&", Array.ConvertAll(args, arg => arg.ToString())) : string.Empty; } } }FCN tarafından 01/Ağu/14 13:02 tarihinde düzenlenmiştir -
FCN teşekkürler akşam evde kontrol ederim.
delphide hiçbirşey yapmadan otomatik mi alıyor bu değerleri ? idhhtp ile login olup sayfaları dolaşabiliyorsun ama c# biraz daha karmaşık. hele bi çözelim kısmetse bunudu çözeriz. teşekkürler
-
ustura bunu yazdıDuPi bunu yazdı
haklısında lastvisit 0 dönüyor.
hocam curl kullanarak c# ile daha kolay login olabilirsin c# ile sadece kullanıcı adı sifreyi post ediceksin curl uzerinden login olacaksın curl kopru gibi dusun :)
hocam .net framework un curl diye bir sınıfı ya da özeliği yok, harici olarak birileri tarafından yazılmış open source kütüphane var. daha önce kullandım bazı işler için
http://sourceforge.net/projects/libcurl-net/
tabii sonuçta yine .net frameworkun system.net kütüphanesini kullanıyor.. çözmek biraz zor olabilir..
@fcn, yazdığın struct yapısını beğendim hoş göründü gözüme :)
