Naravno da ne. CORS je mehanizam koji primenjuju veb brauzeri kako bi zaštitili korisnika od učitavanja potencijalno opasnih resursa sa drugih domena. S obziromm da se ovde ne koristi brauzer, ne izvršava se JS, ne učitavaju resursi, a http.Client i nema ugrađene SOP i CORS, pitanje nije relevantno. Kada smo već kod resursa da dopunim odgovor na tvoje ranije pitanje - program mnogo manje opterećuje server pri učitavanju stranice nego brazuer, jer program učita samo html i ne obraća pažnju na slike, stilove, skripte, fontove... Otvaranje stranice u brauzeru pokreće dvadesetak zahteva, dok program pošalje jedan ili dva.
Da nisi možda mislio na CSRF, a napisao CORS? Ako si mislio na to, CSRF nije nikakav problem. Očekivano je da postoji i lako se izvlači iz stranice.
Code:
if tokenNode := htmlquery.FindOne(doc, "//input[@name='es_token']/@value"); tokenNode != nil {
token = htmlquery.InnerText(tokenNode)
}
Program sam pisao pre skoro godinu dana. Ako se dobro sećam jedini problem sam imao dok nisam provalio da ES u kukijima koristi zagrade [ i ]. Ove zagrade po standardu nisu dozvoljene, a http.Client se striktno pridržava standarda i jednostavno ignoriše takve kukije. Rešio sam to funkcijom cookieHack, gde ručno parsiram kukije i dodajem u teglu one koji nedostaju.
Kod prikazan u poruci iznad, u vezi sa objavljivanjem kroz Tor mrežu, ima nedostatak. Tor ponekad, ničim izazvan, vrati grešku. Problem sam rešio tako što sam napravio izvedenu verziju Klijenta i overrajdovao funkciju Do (terminologija je iz OO jezika, ali mislim da je primenljiva u ovom slučaju).
Nova verzija ponavlja zahtev više puta, dok ne uspe ili dostigne broj od 5 pokušaja.
Code:
type Klijent struct {
http.Client
}
func (k *Klijent) Do(req *http.Request) (*http.Response, error) {
var err error
var resp *http.Response
retry := 5
for i := range retry {
if req.GetBody != nil {
req.Body, _ = req.GetBody()
}
resp, err = k.Client.Do(req)
if err != nil {
log.Println("Do pokušaj ", i, err.Error())
time.Sleep(time.Duration(i) * time.Second)
continue
}
if resp.StatusCode >= 500 {
log.Println("Do pokušaj", i, "Server je vratio status", resp.StatusCode)
if i < retry-1 {
resp.Body.Close()
}
continue
}
if i > 0 {
log.Println("OK", req.URL.String())
}
return resp, err
}
return resp, err
}
Izmenio sam i funkciju getTransport, kako bih Toru dao više vremena.
Code:
func getTransport(proxyEnabled bool) http.RoundTripper {
transport := http.Transport{
DisableKeepAlives: false,
TLSHandshakeTimeout: 20 * time.Second,
ResponseHeaderTimeout: 30 * time.Second,
IdleConnTimeout: 90 * time.Second,
}
if proxyEnabled {
dialer := &net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}
torDialer, _ := proxy.SOCKS5("tcp", "127.0.0.1:9050", nil, dialer)
transport.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) {
return torDialer.Dial(network, addr)
}
}
return &CustomTransport{
Base: &transport,
}
}
Osim navedenih promena neophodno je promeniti potpise funkcija koje kao argument uzimaju http.Client.
Sve poruke na EMZ sada šaljem programom kroz Tor. Jedna od prednost korišćenja programa je i što u slučaju da poruke budu izbrisane, čak i ako ih nikada ne budem obnovio, ostaje mi arhiva kvazi-duhovitih poruka.
[Ovu poruku je menjao pover dana 12.03.2026. u 09:31 GMT+1]
[Ovu poruku je menjao pover dana 12.03.2026. u 09:36 GMT+1]
[Ovu poruku je menjao pover dana 12.03.2026. u 11:47 GMT+1]