2017-02-10 6 views
1

erhalte ich versucht, HTML-Quellcode von Reddit mit Golang zu bekommen:Fehler Timeout HTTP-Anforderung golang

package main 

import (
    "fmt" 
    "io/ioutil" 
    "net/http" 
    "time" 
) 

func main() { 
    timeout := time.Duration(5 * time.Second) 
    client := http.Client{ 
     Timeout: timeout, 
    } 
    resp, _ := client.Get("https://www.reddit.com/") 
    bytes, _ := ioutil.ReadAll(resp.Body) 
    fmt.Println("HTML:\n\n", string(bytes)) 
    defer resp.Body.Close() 
    var input string 
    fmt.Scanln(&input) 
} 

Erste attemp war gut. Aber beim zweiten Mal lief es in einen Fehler:

Ich versuchte, Verzögerung einzustellen, aber es funktioniert immer noch nicht. Sorry über mein schlechtes Englisch.

+0

Die Antwort von Reddit scheint ziemlich nachvollziehbar. Lies es zweimal. – ymonad

Antwort

0

Reddit möchte keine automatischen Scanner \ Grabber auf ihrer Site und hat einen Bot-Schutzmechanismus. Hier ist eine Empfehlung von ihnen:

one request every two seconds

einfach eine Verzögerung zwischen den Anforderungen hinzufügen.

+0

Ich habe Timeout eingestellt. Aber es funktioniert immer noch nicht timeout: = time.Duration (5 * time.Second) client: = http.Client { Timeout: Timeout, } –

+0

Nicht Timeout, aber eine Verzögerung. Versuchen Sie, 'time.Sleep (2000 * time.Millisecond)' vor 'Get' hinzuzufügen. –

0

timeout dient einem anderen Zweck. Timeout ist eine Obergrenze für die Ausführung einer Routine. Was Sie brauchen, ist sleep zwischen nachfolgenden Anfragen.

time.Sleep(6 * time.Second) 
+0

Ich füge time.Sleep unter Get und ReadAll, aber immer noch nicht arbeiten –

+0

können Sie mir den aktualisierten Code zeigen? – Fallen

+0

http://menly.ml/view/0f76a6c2 –