using System; using System.IO; using System.Net; using System.Security.Cryptography.X509Certificates; using System.Text; namespace ConsoleApplication1 { public class Program { private static void Main(string[] args) { try { // Web talebi yapacağımız nesneyi yaratırken gideceğimiz web adresini belirtiyoruz // Bu adres başta https://www.aidap.naimes.faa.gov/aidap/qhome.html muş gibi görünsede // aslında sayfadaki formun gideceği web adresi (sol tarafta html formun action kısmında bulabilirsin). HttpWebRequest talep = (HttpWebRequest) WebRequest.Create("https://www.aidap.naimes.faa.gov/aidap/XmlNotamServlet"); #region Sertifika işlemlerimiz // Sertifikamızı dosyadan çekip şifre ile nesnemizi yaratıyoruz X509Certificate2 clientCertificate = new X509Certificate2(@"C:\aidapuser_2013.pfx", "WC##20abba"); // talep nesnemize sertifikamızı ekleyelim talep.ClientCertificates.Add(clientCertificate); talep.Credentials = CredentialCache.DefaultCredentials; // isteklerimizi zaman içerisinde yaparken Credential'ı değiştirmeyeceğimiz için true yapıyoruz. // Aralarda farklı credentiallar kullanacak olsaydık false yapar, her isteğimizin authenticate edilmesini sunucuya bildirirdik talep.PreAuthenticate = true; #endregion #region Talep edeceğimiz bilgiler ve talep yöntemimiz // bağlantıyı açık tutalım ki birden fazla gidiş gelişlerde TCP işlemlerini her defasında tekrarlayarak arka planda zaman ve emek kaybetmesin talep.KeepAlive = true; // Talebimiz sadece bir url değil, form bilgilerimizin POST metoduyla gönderimi olduğundan ContentType aşağıdaki gibi olacak talep.ContentType = "application/x-www-form-urlencoded"; // html deetiketinin özellikleri şunlardır: // talep.Method = "POST"; // Sayfadaki text kutuları, dropdownların hepsinin bir id'si var ve içlerindeki ya da seçilmiş değerleri ise value olarak // degisken1=deger1°isken2=deger2&..... şeklinde yazılır // aşağıdaki bilgide user id= SXS, password=notam123*, active=Y ve location_id=LTFG olarak gönderilirken diğerleri boş olarak gidiyor. string formunIcerigi = "uid=kullaniciAdiii&password=abc123*&active=Y&lastmod=&todate=&type=&account_id=&location_id=LTFG¬am_id=¬am_text=¬am_report="; // form içeriğini byte[] (byte dizisine) çevirmemiz gerekiyor yani her karakter byte değeriyle gidecek. Mesela; // A h m e t metninin byte dizisi hali // 065 104 109 101 116 (decimal hali) var encoder = new ASCIIEncoding(); var requestData = encoder.GetBytes(formunIcerigi); // Talebimizin içeriğinin ne kadar olduğunu yazalım talep.ContentLength = requestData.Length; #endregion // istemci ile(bizim program), sunucu arasında kurduğumuz bağlantı akışını ele geçirelim (içinden su geçebilen hortum gibi düşün) var gidenAkis = talep.GetRequestStream(); // talebimizin byte[] halini hortumdan akıtmamız gerekecek gidenAkis.Write(requestData, 0, requestData.Length); // şimdi verilerimiz gittiğine göre gidenAkışımızı kapatlım ve gelen akışa bakalım. gidenAkis.Close(); // Protokolün talep kısmı tamamlandı, şimdi cevap kısmını görebileceğimiz nesnemizi talep nesnemize oluşturtalım // Bu tıpkı; // "Git bak ahmet ne yapıyormuş" deyip çocuğu gönderdikten sonra, çocuk gelince // "eee... ne yapıyormuş?" diye sormamıza benzer. Elçiyi gönderdik ve elçi dönünce muhatabımızın cevabını elçiye sormamız gibi. var cevap = (HttpWebResponse) talep.GetResponse(); // HTTP ile dosya indirirken nasıl GBlarca veriyi çektiğimiz bir CEVAP akışı varsa burada da aynı gelen akışını yaratıyoruz. Stream gelen_akisi = cevap.GetResponseStream(); // Dönen cevabı stringe çevirip ekranda gösteriyoruz. StreamReader sr = new StreamReader(gelen_akisi); String result = sr.ReadToEnd(); Console.WriteLine(result); // Kaynaklarla işimiz bitti iade edelim. sr.Close(); gelen_akisi.Close(); } catch (Exception ex) { throw (ex); } } } }
Aklımda Kalası Kelimeler
* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur
8 Aralık 2013 Pazar
PFX dosyasıyla WebRequest yaparak C# ile HTTP formundaki verileri gönderebilmek
Bir arkadaşıma yazmıştım anlaşılır olsun diye ve belki başkalarının da işine yarar ümidiyle buraya eklemiş olayım.
Kaydol:
Kayıtlar (Atom)