משיב מוביל
יצירת request מאתר גוגל

שאלה
-
שלום לכולם!!
אני מעוניינת לבצע שאילתות חיפוש מאתר google דרך קוד c#.
אני רואה שהם חוסמים אותי לפעמים, למרות שדרך הbrowser אין חסימה.
ניסיתי להכנס לfidddler כדי להעתיק את הheaders וכו כדי שהבקשה תראה בדיוק כמו בקשה דרך הbrowser, אבל נראה, משום מה, שהם מסננים קריאות לgoogle.
זה יכול להיות? משהו יודע איך אני בכל זאת מדמה דפדפן ביצירת request?
תודה!!!
שרה.
string html = ""; System.Net.ServicePointManager.Expect100Continue = StaticAtt.Expect100Continue; HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create(url); myWebRequest.KeepAlive = true; myWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; myWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"; myWebRequest.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip,deflate,sdch"); myWebRequest.Headers.Set(HttpRequestHeader.AcceptLanguage, "he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4"); myWebRequest.Headers.Set(HttpRequestHeader.Cookie, @"__gads=ID=e126a9347359e2a3:T=1378795657:S=ALNI_MaK5HvZzc85Gg4tC-4IIGWe7yoXFw; agent_uid=1378795654752; dcsyncynt=true; vgnvisitor=sR1PM0004GM000mYkAGhBKeAUe; _cb_ls=1; __utma=1.92240687.1385310488.1387463116.1387971697.16; __utmc=1; __utmz=1.1387442380.14.4.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=%D7%94%D7%97%D7%99%D7%98%D7%94%20%D7%A6%D7%95%D7%9E%D7%97%D7%AA%20%D7%A9%D7%95%D7%91%20%D7%9C%D7%94%D7%95%D7%A8%D7%93%D7%94; tmcynt=020001000000001300100000000021; _dyauds_page=47@1294169256@0@3.50@520249338@0@4.95@1392490978@0@29.100@-688318138@0@33.101@1972278733@0@34.102@-264413004@0@35.103@412490352@0@36.104@-990684182@0@37.105@1315227445@0@38.106@-971182034@0@39.107@-663019518@0@40.108@-1598492479@0@41.211@653122546@0@195.212@-1374571664@0@196.213@1928760588@0@197.214@1589254879@0@198-199.215@584638648@0@200.216@896448668@0@201.217@-1257678123@0@202.313@-994981885@0@360-361.326@-1708915932@0@375-384.327@-1695460534@0@377.328@-1106950800@0@378.342@279212711@0@396-397-398.343@921663746@0@399-400-401.344@-1299386719@0@402-403-404.345@2093435358@0@405-406-407.346@-140053136@0@408-409-410.347@-927614613@0@411-412-413.368@-1308686476@0@449.369@-2012292496@0@450.370@-119191347@0@451.371@-1183950134@0@452.372@-739303502@0@453.373@-1865062735@0@454.412@470871645@0@500-501-502.413@2141184091@0@503-504-505*2013-12-25*2013-12-25%2003%3A59%3A36; _dysvar_8765235=32%253A@%253Aother; _dyuss_8765235=2; _dycst=tg.w.frv2.ws.ltos.ah.clk.c.; _dyauds_nchc=308.101**34@2.201@1.202@1.396@2.397@1.399@2.400@1.402@2.403@1.405@2.408@2.411@2*47@1.50@1.95@1.100@1.101@nu.102@1.103@1.104@1.105@1.106@1.107@1.108@1.211@1.212@1.213@1.214@1.215@1.216@1.217@1.313@1.326@1.327@1.328@1.342@1.343@1.344@1.345@1.346@1.347@1.368@1.369@1.370@1.371@1.372@1.373@1.412@1.413@1; _dyauds_sess=**; _chartbeat2=skoqmz448349hfp2.1378968101955.1387972090711.0000000001000001; _chartbeat_uuniq=1; _dycnoabc=1387972091163; _dyus_8765235=2329%7C160861%7C88%7C0%7C0%7C0.0.1378968098040.1387972088137.9003990.0%7C358%7C52%7C11%7C113%7C2%7C0%7C0%7C0%7C0%7C0%7C8%7C2%7C8%7C2%7C0%7C36%7C37%7C12%7C137%7C51%7C11%7C0%7C0; _dyri_8765235="); myWebRequest.AllowAutoRedirect = AllowAutoRedirect; myWebRequest.Timeout = 60000; if (prox != null) { IWebProxy proxy = myWebRequest.Proxy; WebProxy myProxy = new WebProxy(); string proxyAddress = "http://" + prox.ip + ":" + prox.port; string username = prox.userName; string password = prox.pass; Uri newUri = new Uri(proxyAddress); myProxy.Address = newUri; myProxy.Credentials = new NetworkCredential(username, password); myWebRequest.Proxy = myProxy; } try { //myWebRequest.getr HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse(); Stream responseStream = myWebResponse.GetResponseStream(); if (myWebResponse.ContentEncoding.ToLower().Contains("gzip")) responseStream = new GZipStream(responseStream, CompressionMode.Decompress); else if (myWebResponse.ContentEncoding.ToLower().Contains("deflate")) responseStream = new DeflateStream(responseStream, CompressionMode.Decompress); MemoryStream ms = ConvertStreamToMemoryStream(responseStream); StreamReader reader; s.url = getConversionDomain(myWebResponse.ResponseUri.AbsoluteUri); reader = new StreamReader(ms, System.Text.Encoding.GetEncoding(myWebResponse.CharacterSet.Replace("\"", ""))); s.encodding = myWebResponse.CharacterSet; html = reader.ReadToEnd(); myWebResponse.Close();
תשובות
-
בהחלט יכול להיות שהם חוסמים, למעשה לא רק יכול להיות אלא שבטוח :-)
אפשר לעבוד בעקרון עם הקישור הרגיל ולחקור את התוצאות אם המערכת לא עמוסה מדי, אבל במערכות עמוסות מתחילות החסימות. שימוש ב עכביש חיפוש למשל על המערכת של גוגל יוביל כניראה לחסימה שיכולות להיות לה השלכות גם לעתיד (לכתובת הדומיין שלך או ה IP וכו'). להכיר את כל החוקים של גוגל זו התמחות שלמה (זה התפגיש ל SEO). לגוגל יש מנגנון מאוד מורכב (וסודי) לאיתור ניסיונות שימוש לא תקין במערכת שלהם.דווקא למפתחים גוגל מספקת בדרך כלל API נהדרים, שמאפשר להתממשק עם המערכות שלהם. אני ממליץ לחפש חומר על Google API. אפשר להתחיל אולי כאן:
https://developers.google.com/custom-search/?csw=1
http://stackoverflow.com/questions/tagged/google-search-api
http://www.c-sharpcorner.com/UploadFile/2b481f/using-google-custom-search-api-in-web-api/
[Personal Site] [Blog] [Facebook]
- נערך על-ידי pituachMVP, Moderator יום חמישי 23 ינואר 2014 11:45
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 26 ינואר 2014 11:02
כל התגובות
-
בהחלט יכול להיות שהם חוסמים, למעשה לא רק יכול להיות אלא שבטוח :-)
אפשר לעבוד בעקרון עם הקישור הרגיל ולחקור את התוצאות אם המערכת לא עמוסה מדי, אבל במערכות עמוסות מתחילות החסימות. שימוש ב עכביש חיפוש למשל על המערכת של גוגל יוביל כניראה לחסימה שיכולות להיות לה השלכות גם לעתיד (לכתובת הדומיין שלך או ה IP וכו'). להכיר את כל החוקים של גוגל זו התמחות שלמה (זה התפגיש ל SEO). לגוגל יש מנגנון מאוד מורכב (וסודי) לאיתור ניסיונות שימוש לא תקין במערכת שלהם.דווקא למפתחים גוגל מספקת בדרך כלל API נהדרים, שמאפשר להתממשק עם המערכות שלהם. אני ממליץ לחפש חומר על Google API. אפשר להתחיל אולי כאן:
https://developers.google.com/custom-search/?csw=1
http://stackoverflow.com/questions/tagged/google-search-api
http://www.c-sharpcorner.com/UploadFile/2b481f/using-google-custom-search-api-in-web-api/
[Personal Site] [Blog] [Facebook]
- נערך על-ידי pituachMVP, Moderator יום חמישי 23 ינואר 2014 11:45
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 26 ינואר 2014 11:02
-
-
אהלן שרה,
בעקרון את היית בדרך הנכונה, אבל כפי שהסברתי בשיחה היום, אני לא אתמוך בפורום בפעולה שנוגת את החוקים של נותן השירות. מה שאת מבקשת זה למעשה הסבר כיצד לעקוף את המגבלות של וגל על מנת לעשות שימוש במשאבים שלהם, בצורה מנוגדת לחוקים שלהם.
מבחינת גוגל השירות שלהם ניתן למפתחים באמצעות ה API שלהם (שמשתנה מפעם לפעמים), או שימוש ידני (לא אוטומטי) במנוע החיפוש שלהם (שגם משתנה דיי הרבה מאחורי הקלעים מסיבות אלו בדיוק).
בכל מקרה אם תנסחי משהו מעט שונה, ותירצי עזרה ספציפית בשאלה הקשורה לפיתוח ב C# אני אשמח לעזור כאן :-)
[Personal Site] [Blog] [Facebook]
- נערך על-ידי pituachMVP, Moderator יום חמישי 23 ינואר 2014 20:11