Autor Beitrag
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.05.12 20:27 
ausblenden C#-Quelltext
1:
2:
3:
            WebClient wc = new WebClient();
            for (int start = 0; start < 1000; start+=10)
                wc.DownloadString("http://www.google.de/search?q=inurl:sharp&start=" + start);


Sollte dir einen 503 Error bringen.
Oliver M.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 109
Erhaltene Danke: 1

Win 8 CP
VS 11 Beta
BeitragVerfasst: So 20.05.12 20:19 
Ich erhalte einen 503 nur wenn ich inurl: angebe, aber inzwischen werden alle Suchanfragen mit inurl: die von meinem Programm kommen blockiert. Mal sehen ob die Sperre morgen weg ist. Kannst du nicht einfach auf inurl: Verzichten?
Jedenfalls habe ich jetzt herausgefunden, wo man den http://www.google.de/sorry/ auslesen kann, aber wenn man http://www.google.de/sorry/ abfragt, erhält man seltamer Weise auche einen 503:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
catch (WebException ex)
{
  if (ex.Response.ResponseUri.AbsolutePath == "/sorry/")
  {
    HttpWebRequest request = HttpWebRequest.CreateHttp(ex.Response.ResponseUri);
    string response = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
  }
}
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.05.12 10:26 
user profile iconOliver M. hat folgendes geschrieben Zum zitierten Posting springen:
Ich erhalte einen 503 nur wenn ich inurl: angebe, aber inzwischen werden alle Suchanfragen mit inurl: die von meinem Programm kommen blockiert. Mal sehen ob die Sperre morgen weg ist. Kannst du nicht einfach auf inurl: Verzichten?


War bei mir genauso, ich habe mir dann ne neue IP versorgt, damit ich davon wieder wegkam. Sollte aber heute wieder weg sein.

user profile iconOliver M. hat folgendes geschrieben Zum zitierten Posting springen:
Kannst du nicht einfach auf inurl: Verzichten?


Dieser Parameter sorgt eigentlich nur dafür, dass die Suchanfrage schneller als eine Botanfrage erkannt wird. Das ist vielleicht auch der Grund warum überhaupt kein inurl Parameter bei der Search API von Google funktioniert.

user profile iconOliver M. hat folgendes geschrieben Zum zitierten Posting springen:

Jedenfalls habe ich jetzt herausgefunden, wo man den http://www.google.de/sorry/ auslesen kann, aber wenn man http://www.google.de/sorry/ abfragt, erhält man seltamer Weise auche einen 503:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
catch (WebException ex)
{
  if (ex.Response.ResponseUri.AbsolutePath == "/sorry/")
  {
    HttpWebRequest request = HttpWebRequest.CreateHttp(ex.Response.ResponseUri);
    string response = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
  }
}


Ich habe HttpFox fürn Firefox eingesetzt, das schneidet mir die WebRequests mit und laut HttpFox darf es gar nicht zu einer 503 Exception kommen, sondern zu einer Weiterleitung (im Header) zu http://www.google.de/sorry/. Irgendein Parameter muss da noch irgendwie gesetzt werden, sodass es zu einer Weiterleitung und nicht zu einer Exception kommt.

Wie schon einmal geschrieben brauch ich keine Vollautomatisierung, also die Eingabe der Captchas wäre kein Problem, nur muss ich dieses erstmal herunterladen um es an den Benutzer weitergeben zu können.

Bei Gelegenheit werde ich mal noch LiveHttpHeaders oder Wireshark anwerfen um herauszufinden, was da nun noch zwischen BrowserRequest und C#-WebRequest unterschiedlich ist. Viel Hoffnung habe ich dabei aber nicht.
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.05.12 15:45 
Live HTTP headers:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
http://www.google.de/search?q=sharp&start=10

GET /search?q=sharp&start=10 HTTP/1.1
Host: www.google.de
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate

HTTP/1.1 302 Found
Via: 1.1 INET
Connection: Keep-Alive
Content-Length: 287
Date: Mon, 21 May 2012 13:40:13 GMT
Location: http://www.google.com/sorry/?continue=http://www.google.de/search%3Fq%3Dsharp%26start%3D10
Content-Type: text/html; charset=UTF-8
Server: GFE/2.0
Cache-Control: private


Wikipedia schreibt dazu:

Zitat:
302 Found
Die angeforderte Ressource steht vorübergehend unter der im „Location“-Header-Feld angegebenen Adresse bereit.[3] Die alte Adresse bleibt gültig. Wird in HTTP/1.1 je nach Anwendungsfall durch die Statuscodes 303 bzw. 307 ersetzt. 302-Weiterleitung ist aufgrund eines Suchmaschinen-Fehlers, dem URL-Hijacking, in Kritik geraten. Webmaster sollten von der Verwendung eines solchen Redirects absehen, wenn sie auf fremde Inhalte weiterleiten.
Oliver M.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 109
Erhaltene Danke: 1

Win 8 CP
VS 11 Beta
BeitragVerfasst: Di 22.05.12 17:54 
user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe HttpFox fürn Firefox eingesetzt, das schneidet mir die WebRequests mit und laut HttpFox darf es gar nicht zu einer 503 Exception kommen, sondern zu einer Weiterleitung (im Header) zu http://www.google.de/sorry/. Irgendein Parameter muss da noch irgendwie gesetzt werden, sodass es zu einer Weiterleitung und nicht zu einer Exception kommt.

Ich habe mir den Fehler noch mal genauer angeschaut und habe gesehen, dass die Weiterleitung einwandfrei funktioniert. Die 503 erhält man beim aufrufen des Soory-Urls:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
HttpWebRequest request = HttpWebRequest.Create(url);
try 
{ request.GetResponse(); }
catch (WebException ex)
{
  Console.WriteLine(ex.Response.ResponseUri.ToString()) // http://www.google.de/sorry/...
}

Allerdings kann man mittels ex.Response die Seite mit dem Chapta auslesen :zwinker::
ausblenden C#-Quelltext
1:
string response = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();					

Und somit auch das Chapta-Bild:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
string response = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();

string imageUrl = new Regex("<img src=\"(?<url>.+?)\" border=\"1\" alt=\"Bilder aktivieren\">").Match(response).Groups["url"].Value;
Stream imageStream = HttpWebRequest.Create("http://www.google.de" + imageUrl).GetResponse().GetResponseStream();
Image chapta = new Bitmap(imageStream);

Jetzt müssen die entschlüsselten Chaptas nur noch an Google gesendet werden, aber ich denke das dürfte nicht schwer sein.
Einloggen, um Attachments anzusehen!
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Di 22.05.12 19:32 
Stimmt, auf die Idee bin ich noch gar nicht gekommen in der Exception dann den Response noch auszulesen :)

Getestet wird erst morgen, aber ich danke dir schon einmal :)

Edit:

Ja, das klappt, man muss also den Response in der WebException auslesen. Das hatte mich irretiert, denn mit diversen Tools wurde das nicht als WebException mitgeschnitten sondern als Weiterleitung.

Man brauch zum Absenden des Captchas auf jeden Fall einen CookieContainer, ohne funktionierts nicht. Und man muss an folgenden Url einen Request machen, damit man weitergeleitet wird:

ausblenden Quelltext
1:
http://www.google.de/sorry/Captcha?continue=http://www.google.de/search?searchString&id="+id+"&captcha="+captcha+"&submit=Senden					


Wobei "id" im Response rauszulesen ist und captcha die Zeichenfolge vom Captcha ist.

Edit2:

Danke für dein Projekt.

Was ich noch festgestellt habe, dass der Regex nicht ganz stimmt, da du ja die Url aus dem grünen Text von Google parst. Das Problem dabei ist, dass es sein kann, dass die grüne Url manchmal nur einen Teil der kompletten URL darstellt. Das ist dann der Fall, wenn die Url sehr lang ist, dann wird von Google mit ... gekürzt. Die richtige Url befindet sich nach "<a href="...

Liebe Grüße und danke für deine Mithilfe :)
Oliver M.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 109
Erhaltene Danke: 1

Win 8 CP
VS 11 Beta
BeitragVerfasst: Mo 28.05.12 17:27 
Gern geschehen!