none
יצירת request מאתר גוגל RRS feed

  • שאלה

  • שלום לכולם!!

    אני מעוניינת לבצע שאילתות חיפוש מאתר 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();
                        

    יום חמישי 23 ינואר 2014 08:41

תשובות

כל התגובות

  • בהחלט יכול להיות שהם חוסמים, למעשה לא רק יכול להיות אלא שבטוח :-)
    אפשר לעבוד בעקרון עם הקישור הרגיל ולחקור את התוצאות אם המערכת לא עמוסה מדי, אבל במערכות עמוסות מתחילות החסימות. שימוש ב עכביש חיפוש למשל על המערכת של גוגל יוביל כניראה לחסימה שיכולות להיות לה השלכות גם לעתיד (לכתובת הדומיין שלך או ה 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]signature

    • נערך על-ידי pituachMVP, Moderator יום חמישי 23 ינואר 2014 11:45
    • סומן כתשובה על-ידי Eran Sharvit יום ראשון 26 ינואר 2014 11:02
    יום חמישי 23 ינואר 2014 11:44
    מנחה דיון
  • תודה על התגובה!!!

    אני עושה עוד דברים חוץ מעכביש... 

    השאלה שלי היא:

    איך אני מדמה קריאה לאתר מסוים (במקרה הזה גוגל) שהאתר שאני קוראת לו יחשוב שאני קוראת דרך הדפדפן?

    הסתכלתי בfiddler כי רציתי לראות את כל הheaders ואני לא רואה שום קריאה לגוגל..

    תודה!!

    שרה.

    יום חמישי 23 ינואר 2014 12:21
  • אהלן שרה,

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

    מבחינת גוגל השירות שלהם ניתן למפתחים באמצעות ה API שלהם (שמשתנה מפעם לפעמים), או שימוש ידני (לא אוטומטי) במנוע החיפוש שלהם (שגם משתנה דיי הרבה מאחורי הקלעים מסיבות אלו בדיוק).

    בכל מקרה אם תנסחי משהו מעט שונה, ותירצי עזרה ספציפית בשאלה הקשורה לפיתוח ב C# אני אשמח לעזור כאן :-)


    [Personal Site] [Blog] [Facebook]signature

    יום חמישי 23 ינואר 2014 19:18
    מנחה דיון