שימוש ב-XMLHTTP בצד שרת

‏ • 3 בינואר, 2005

בעזרת XMLHTTP (צד-שרת) נוכל לשלוח בקשת text/xml לשרת מרוחק/מקומי. השרת המרוחק/מקומי יעבד את הבקשה ויחזיר פלט מתאים (נתוני text/xml או מחרוזת נתונים בינאריים).

יצירת האובייקט

את האובייקטים יוצרים בצורה הבאה:










1
2
3
4  








<%
Dim XMLHTTP
Set XMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
%>


לאובייקט קיימות מספר גרסאות.
מומלץ להשתמש בגרסא האחרונה ביותר שקיימת.
עבור גרסא 3.0 נכתוב במקום ""Microsoft.XMLHTTP את הערך "MSXML2.ServerXMLHTTP".

שיטות האובייקט

לאובייקט קיימות 6 שיטות המפורטות דלהלן:

השיטה "abort":

השיטה מבטלת את בקשת ה-HTTP הנוכחית.
השימוש בה יהיה כך:










1  








XMLHTTP.abort()



השיטה "getAllResponseHeaders":

השיטה מחזירה את כל ה-HTTP Headers.
השימוש בה יהיה כך:










1
2
3  








<%
Response.Write XMLHTTP.getAllResponseHeaders
%>


הפלט יהיה דומה לקוד הבא:

Connection: keep-alive Date: Sun, 28 Nov 2004 04:49:43 GMT Server: Microsoft-IIS/6.0 Content-Length: 63430 Content-Type: text/html Cache-control: private


השיטה "getResponseHeader":

השיטה מחזירה את ה-Header המבוקש.
השימוש בה יהיה כך:










1
2
3  








<%
Response.Write XMLHTTP.getResponseHeader(HeaderName)
%>


במקום HeaderName נציב ערכים כגון: Content-Type עבור סוג פלט העמוד, Server עבור קבלת שם/גרסת השרת וכו'.

השיטה "setRequestHeader":

השיטה מאפשרת לנו להגדיר Header מסוים לבקשה שלנו.
השימוש בה יהיה כך:










1  








XMLHTTP.setRequestHeader(HeaderName,Value)




  • HeaderName = שם ה-Header אותו נגדיר
  • Value = הערך שניתן ל-Header

דוגמא:










1  








XMLHTTP. setRequestHeader("Content-type","text/html")


בעזרת השיטה נוכל להגדיר הגדרות מסוימות לבקשה שלנו כגון סוג קבלת הפלט (Content-Type), שפת הפלט (CharSet), סוג דפדפן (user-agent) ועוד.

השיטה "Open":

השיטה מאתחלת את בקשת ה-XMLHTTP לשרת המרוחק ומגדירה לו עד 5 פרמטרים.
השימוש בה יהיה כך:










1  








XMLHTTP.Open Method,Url,Async,Username,Password




  • Method שיטת שליחת הבקשה. ערכים מקובלים הם: Get,Post.
  • Url כתובת שליחת הבקשה. כתובת בשרת מרוחק או בשרת המקומי.
  • Async הגדרה ל-XMLHTTP אם לבצע מצב-סינכרוני. אם True אז XMLHTTP יטפל בכל המידע "ברקע" וטעינת העמוד תמשיך כרגיל. (יש להגדיר False מאחר ואנו מעוניינים להשתמש בפלט הבקשה).
  • Username שם המשתמש (עבור כתובת שרת מאובטח כגון SSL)
  • Password סיסמא (עבור כתובת שרת מאובטח כגון SSL)

השיטה "Send":

השיטה שולחת את הבקשה לשרת ומחזירה תשובה (פלט ונתונים).
השימוש בה יהיה כך:










1  








XMLHTTP.Send


דוגמא לקוד המשתמש בשיטות העיקריות:










1
2
3
4
5  








<%
XMLHTTP.Open "GET","https://www.webmaster.org.il",False
XMLHTTP.setRequestHeader "Content-Type","text/html"
XMLHTTP.Send
%>


השיטות Open ו-Send הן כמובן שיטות חובה עבור כל שליחת בקשה.

מאפייני האובייקט

לאובייקט קיימים 7 מאפיינים עיקריים המפורטים דלהלן:

המאפיין "ResponseBody":

המאפיין מחזיר את הפלט כאוסף ביטים (בהמשך נשתמש בפונקציה עבור המרת אוסף הביטים לקוד תקין עבור פלט המתאים).
השימוש בו יהיה כך:










1
2
3  








<%
Response.Write XMLHTTP.ResponseBody
%>



המאפיין "ResponseText":

המאפיין מחזיר את הפלט כמחרוזת (מיועד בעיקר לנתוני טקסט כגון קבצי txt,html,xml וכו').
השימוש בו יהיה כך:










1
2
3  








<%
Response.Write XMLHTTP.ResponseText
%>



המאפיין "ResponseStream":

המאפיין מחזיר את הפלט כאובייקט מחרוזת בינארית.
השימוש בו יהיה כך:










1
2
3  








<%
XMLHTTP.ResponseStream
%>



המאפיין "ResponseXML":

המאפיין מחזיר את הפלט כאובייקט DOMDocument.
השימוש בו יהיה כך:










1
2
3  








<%
Set xmlObject = XMLHTTP.ResponseXML
%>



המאפיין "readyState":

המאפיין מחזיר ערך מספרי המייצג את מצב הבקשה שנשלחה לשרת.
השימוש בו יהיה כך:










1  








XMLHTTP.readyState


ההסברים עבור הערכים המספריים:

  • 0 – האובייקט נוצר אך לא נשלחה בקשה (השיטה open לא נקראה לשליחת הבקשה).
  • 1 – האובייקט נוצר והבקשה הוגדרה אך לא נשלחה (השיטה send לא נקראה).
  • 2 – שליחת הבקשה בוצעה אך הסטאטוס וה-headers לא זמינים.
  • 3 – חלק מן המידע הוחזר כתשובה אך לא ניתן להשתמש במאפיינים לכתיבת הפלט מאחר והסטאטוס וה-headers לא זמינים באופן מלא.
  • 4 – כל המידע הוחזר כתשובה וניתן להשתמש בכל המאפיינים האפשריים.

המאפיין "status":

המאפיין יחזיר ערך מספרי של סטאטוס בקשת ה-HTTP.
השימוש בו יהיה כך:










1  








XMLHTTP.status


מספר דוגמאות:

  • סטאטוס 200 מסמל שהכל תקין.
  • סטאטוס 305 מסמל שהבקשה משתמשת בשרת פרוקסי.
  • סטאטוס 404 מסמלת שכתובת הבקשה אינה קיימת.

המאפיין "statusText":

המאפיין יחזיר ערך מחרוזת של סטאטוס בקשת ה-HTTP.
השימוש בו יהיה כך:










1  








XMLHTTP.statusText


המאפיין זהה למאפיין המספרי (status) אך מחזיר ערך מחרוזת במקום מספר. מספר דוגמאות:

  • סטאטוס "OK" מסמל שהכל תקין.
  • סטאטוס "Use Proxy" מסמל שהבקשה משתמשת בשרת פרוקסי.
  • סטאטוס "Not Found" מסמלת שכתובת הבקשה אינה קיימת.

טיפול בעברית

קיימת בעיה עם תמיכה בפלט בעברית.
יש להמיר את הפלט מאסקי ליוניקוד על מנת לקבל עברית תקינה.
לשם כך יש להשתמש בפונקציה פשוטה לשימוש שתפתור את בעיית העברית.










1
2
3
4
5
6
7
8  








<%
Function AsciiToUnicode(ByRef pstrAscii)
    For llngIndex = 1 To LenB(pstrAscii)
        lstrUnicode = lstrUnicode & Chr(AscB(MidB(pstrAscii, llngIndex,1)))
    Next
    AsciiToUnicode = lstrUnicode
End function
%>


השימוש בפונקציה יהיה כזה:










1
2
3  








<%
Response.Write AsciiToUnicode(XMLHTTP.ResponseBody)
%>



דוגמאות: מבזקי נענע ותפוז


מבזקי נענע:












1
2
3
4
5
6
7
8
9
10
11
12
13
14  








<%
Dim XMLHTTP : Set XMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
With XMLHTTP
    .Open "GET","http://www.nana.co.il/", False
    .Send
    Dim strData : strData = AsciiToUnicode(.ResponseBody)
End With
Set XMLHTTP = Nothing

Dim intStart : intStart = InStr(strData,"<marquee height=""28"" direction=""up"" scrollamount=""1"" scrolldelay=""180"" onMouseOver=""this.stop()"" onMouseOut=""this.start()"">")
Dim intEnd : intEnd = InStr(strData,"<br></marquee></td></tr></table>")
strData = Mid(strData,intStart,intEnd-intStart) & vbcrlf & "</marquee>"
Response.Write strData
%>


בדוגמא שלחנו בקשה עם שיטת GET לכתובת האתר נענע.
הצבנו במשתנה את הפלט המתקבל ושלחנו אותו לפונקציה עבור טיפול בעברית.
החלק החשוב בקוד הוא שליפת המבזקים מתוך כל קוד האתר:
בשורה 9-10 הצבנו במשתנים את המיקום ההתחלתי של המבזקים ואת המיקום הסופי.
בשורה 11 הצבנו במשתנה strData את פלט המבזקים בלבד בעזרת הפונקציה Mid שבה הגדרנו את פלט האתר, המיקום ההתחלתי של המבזקים ואת המיקום הסופי (חיסור הערך הסופי בערך ההתחלתי יביא את מספר התווים של המבזקים מהערך ההתחלתי).
בשורה 12 הדפסנו את פלט המבזקים המוצב במשתנה strData.
* על מנת שמבזקי נענע יוצגו כראוי ויפעלו יש להוסיף לקוד מהמסך את הגדרות ה-CSS המתאימים למבזקי החדשות ופונקציה ב-JS שמפעילה את קישורי המבזקים (ראו דוגמא מטה).

מבזקי תפוז:












1
2
3
4
5
6
7
8
9
10
11
12
13
14  








<%
Dim XMLHTTP : Set XMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
With XMLHTTP
    .Open "GET","http://tapuz.co.il/tapuznews/default.asp", False
    .Send
    Dim strData : strData = AsciiToUnicode(.ResponseBody)
End With
Set XMLHTTP = Nothing

Dim intStart : intStart = InStr(strData,"<!– Flash Marquee Start –>")
Dim intEnd : intEnd = InStr(strData,"<!– Flash Marquee End –>")
strData = Replace(Mid(strData,intStart,intEnd-intStart),"Flash.asp","http://tapuz.co.il/tapuznews/Flash.asp")
Response.Write strData
%>


בדוגמא שלחנו בקשה עם שיטת GET לכתובת מבזקי תפוז.
הצבנו במשתנה את הפלט המתקבל ושלחנו אותו לפונקציה עבור טיפול בעברית.
החלק החשוב בקוד הוא שליפת המבזקים מתוך כל קוד העמוד:
בשורה 9-10 הצבנו במשתנים את המיקום ההתחלתי של המבזקים ואת המיקום הסופי.
בשורה 11 הצבנו במשתנה strData את פלט המבזקים בלבד בעזרת הפונקציה Mid שבה הגדרנו את פלט העמוד, המיקום ההתחלתי של המבזקים ואת המיקום הסופי (חיסור הערך הסופי בערך ההתחלתי יביא את מספר התווים של המבזקים מהערך ההתחלתי).
ביצענו החלפה בעזרת הפונקציה Replace את הקישורים של המבזקים לכתובת המלאה במבזקי תפוז על מנת שהקישורים יהיו תקינים ופעילים. בשורה 12 הדפסנו את פלט המבזקים המוצב במשתנה strData.

צפייה בדוגמאות:

מבזקי נענע
מבזקי תפוז

לחצו כאן להורדת קוד דוגמאות

בהצלחה!

תגיות: , , ,

BuildHome

מפתח אתרים ואפליקציות ווב מנוסה

תגובות בפייסבוק