HttpWebRequest
יוצא לי הרבה לפנות מהקוד שלי לאתרים אחרים למשוך מידע דרך http, ואומנם רובנו יודעים לבצע את הפעולה, אך מספר פעמים נשאלתי כיצד לפנות לאתר אחר דרך Post - הכוונה היא שאני רוצה בעת הפניה לאתר השני להעביר פרמטרים, כמו מילת חיפוש לגוגל, אך לא רוצה להעביר אותם בשרות הכותרת כמו בגוגל, אלא בגוף הפניה כמו ברוב האתרים שיש טופס ולוחצים על לחצן כדי לשלוח את נתוני הטופס. אז האמת היא שזה בסך הכל הוספת שורה לצורת הפניה הרגילה שלנו (אלא אם כן השתמשתם במחלקה webclient ועכשיו נשתמש במחלקה אחרת...)
והנה הקוד, נראה לי שהוא די מסביר את עצמו
string postData =
String.Format(
"username={0}&password={1}",
USERNAME, PASSWORD);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(TARGET_URL);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream());
requestWriter.Write(postData);
requestWriter.Close();
StreamReader responseReader = new StreamReader(
webRequest.GetResponse().GetResponseStream()
);
responseText = responseReader.ReadToEnd();
responseReader.Close();
בשורה הראשונה יצרתי את המידע שאני רוצה לשלוח, שימו לב שזה ממש אותו הדבר כמו לשלוח בשורת הכותרת - כל מפתח וערך מופרדים בסימן =, וכל זוג כזה מופרד ב & מהזוג השני
בשורה השניה יצרתי את הבקשה, הייתי צריך לעשות casting כי המחלקה הזאת לא יוצרת בקשה בעצמה
בשורה השלישית אני מציין שאני רוצה שהמידע ישלח ב post ולא ב get
בשורה הרביעית אני מציין את סוג הנתונים - שזה בעצם מה שהדפדפן עושה כשאנו לוחצים על submit בטופס באיזה אתר
בשורה החמישית אנו פונים לאתר המרוחק ויוצרים קשר
בשורה השישית אנו שולחים את המידע ואז קוראים את התגובה של האתר המרוחק וסוגרים את החיבור...:)