abs icon indicating copy to clipboard operation
abs copied to clipboard

Add a function for GET requests?

Open Iskander0 opened this issue 4 years ago • 1 comments

Now you can do curl '$url', but it's faster to have a function for GETting built into ABS :

import "github.com/valyala/fasthttp"

// httpGET(string:"https://www.example.com")
func httpGETFn(tok token.Token, env *object.Environment, args ...object.Object) object.Object {
	err := validateArgs(tok, "httpGET", args, 1, [][]string{{object.STRING_OBJ}})
	if err != nil { return err }

	url := args[0].(*object.String)

	readTimeout, _ := time.ParseDuration("1000ms")
	writeTimeout, _ := time.ParseDuration("1000ms")
	maxIdleConnDuration, _ := time.ParseDuration("1h")
	var client *fasthttp.Client
	client = &fasthttp.Client{
		ReadTimeout:                   readTimeout,
		WriteTimeout:                  writeTimeout,
		MaxIdleConnDuration:           maxIdleConnDuration,
		NoDefaultUserAgentHeader:      true, // Don't send: User-Agent: fasthttp
		DisableHeaderNamesNormalizing: true, // If you set the case on your headers correctly you can enable this
		DisablePathNormalizing:        true,
		// increase DNS cache time to an hour instead of default minute
		Dial: (&fasthttp.TCPDialer{ Concurrency:      4096, DNSCacheDuration: time.Hour, }).Dial,
	}

	req := fasthttp.AcquireRequest()
	req.SetRequestURI(url.Value)
	req.Header.SetMethod(fasthttp.MethodGet)
	resp := fasthttp.AcquireResponse()
	err1 := client.Do(req, resp)
	if err1 != nil { return &object.String{Token: tok, Value: err1.Error() } }
	fasthttp.ReleaseRequest(req)
	defer fasthttp.ReleaseResponse(resp)

	return &object.String{Token: tok, Value: string(resp.Body())}		
}

Iskander0 avatar Mar 05 '22 00:03 Iskander0

I don't really mind getting some sort of basic http client into th standard library -- I'd be open to RFC / proposals / PRs around it :)

On Sat, Mar 5, 2022, 4:32 AM Agathon @.***> wrote:

Now you can do curl '$url', but it's faster to have a function for GETting built into ABS :

`import "github.com/valyala/fasthttp"

........

// httpGET(string:"https://www.example.com") func httpGETFn(tok token.Token, env *object.Environment, args ...object.Object) object.Object { err := validateArgs(tok, "httpGET", args, 1, [][]string{{object.STRING_OBJ}}) if err != nil { return err }

url := args[0].(*object.String)

readTimeout, _ := time.ParseDuration("1000ms") writeTimeout, _ := time.ParseDuration("1000ms") maxIdleConnDuration, _ := time.ParseDuration("1h") var client *fasthttp.Client client = &fasthttp.Client{ ReadTimeout: readTimeout, WriteTimeout: writeTimeout, MaxIdleConnDuration: maxIdleConnDuration, NoDefaultUserAgentHeader: true, // Don't send: User-Agent: fasthttp DisableHeaderNamesNormalizing: true, // If you set the case on your headers correctly you can enable this DisablePathNormalizing: true, // increase DNS cache time to an hour instead of default minute Dial: (&fasthttp.TCPDialer{ Concurrency: 4096, DNSCacheDuration: time.Hour, }).Dial, }

req := fasthttp.AcquireRequest() req.SetRequestURI(url.Value) req.Header.SetMethod(fasthttp.MethodGet) resp := fasthttp.AcquireResponse() err1 := client.Do(req, resp) if err1 != nil { return &object.String{Token: tok, Value: err1.Error() } } fasthttp.ReleaseRequest(req) defer fasthttp.ReleaseResponse(resp)

return &object.String{Token: tok, Value: string(resp.Body())}

}

`

— Reply to this email directly, view it on GitHub https://github.com/abs-lang/abs/issues/469, or unsubscribe https://github.com/notifications/unsubscribe-auth/AACQFZCXW3A75XJB6BCFMKTU6KTS3ANCNFSM5P64WECA . You are receiving this because you are subscribed to this thread.Message ID: @.***>

odino avatar Mar 07 '22 08:03 odino