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 de etiketinin ö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
HttpWebRequest etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
HttpWebRequest etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
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:
Yorumlar (Atom)