go-bulkrequest is a simple library for fetching and parsing data from multiple URLs/endpoints.
Project is developed in go.
Every bulk request is highly configurable, for example:
- You can use proxy connection instead of direct connection, for every proxy, requests will be parallelized.
- You can set cookies/headers/user-agent for every request.
- You can provide custom parser for every request.
go get github.com/jodua/go-bulkrequest/bulkrequestimport "github.com/jodua/go-bulkrequest/bulkrequest"bulkRequest := bulkrequest.NewBulkRequest()Builder methods
SetBaseUrl - sets base URL for all requests.
Params:
baseUrl string- baseUrl
bulkRequest.SetBaseUrl("https://example.com")SetUrls - sets list of URL suffixes for all requests.
Params:
urls []string- list of URL suffixes
Following example will create requests for URLs:
- Base URL + Urls[0]
- Base URL + Urls[1]
- ...
- Base URL + Urls[len(Urls)-1]
urlList := []string{"1", "2", "3", "4", "5"}
bulkRequest.SetUrls(urlList)SetTimeout - sets timeout after which request will be aborted.
Params:
timeout time.Duration- duration of timeout
bulkRequest.SetTimeout(time.Second * 10)AddHeader - adds header to all requests.
Params:
key string- header keyvalue string- header value
bulkRequest.AddHeader("X-Header", "Value")AddCookie - adds cookie to all requests.
Params:
name string- header keyvalue string- header value
bulkRequest.AddCookie("Cookie", "Value")SetDelayConfig - sets delay configuration for all requests.
Params:
delayConfig *datatypes.DelayConfig- delay configuration
Delay config is a struct that contains delay configuration for all requests. It consists of:
DelayMin time.Duration- minimum delay between requestsDelayMax time.Duration- maximum delay between requests
When fetching data from multiple URLs, requests will be delayed between DelayMin and DelayMax time.
import "github.com/jodua/go-bulkrequest/datatypes"
delayConfig := datatypes.DelayConfig{
DelayMin: time.Second * 1,
DelayMax: time.Second * 2,
}
bulkRequest.SetDelayConfig(&delayConfig)SetProxyConfig - sets proxy configuration for all requests. If proxy configuration is not set, requests will be made directly.
Params:
proxyConfig *datatypes.ProxyConfig- proxy configuration
Proxy config is a struct that contains proxy configuration for all requests. It consists of:
ProxyList []string- list of proxiesRequestsPerProxy- number of requests that will be sent through each proxy
import "github.com/jodua/go-bulkrequest/datatypes"
proxyList := []string{"http://proxy1:1231", "http://proxy2:1111"}
proxyConfig := datatypes.ProxyConfig{
ProxyList: proxyList,
RequestsPerProxy: 5,
}
bulkRequest.SetProxyConfig(&delayConfig)SetUserAgentConfig - sets user agent configuration for all requests.
Params:
userAgentConfig *datatypes.UserAgentConfig- user agent configuration
User agent config is a struct that contains user agent configuration for all requests. It consists of:
UserAgentList []string- list of user agents
import "github.com/jodua/go-bulkrequest/datatypes"
userAgentList := []string{"UserAgent1", "UserAgent2"}
userAgentConfig := datatypes.UserAgentConfig{
UserAgentList: userAgentList,
}
bulkRequest.SetUserAgentConfig(&userAgentConfig)SetParser - sets parser for all requests.
Params:
parser *jsonparser.JSONParser- pointer to parser object
Example parser can be found in github.com/jodua/go-bulkrequest/JSONParser/schemas package.
var parser = schemas.JSONPlaceholderTodoParser
bulkRequest.SetParser(&parser)br := bulkRequest.Build()
fetch, err := br.Fetch()
if err != nil {
// handle error
}
log.Println(fetch)Full example can be found in main.go file.
JSONParser struct consists of:
JSONSchema any- pointer to JSON schema objectConvertFunction func(any,string) any- function that converts JSON data to desired format, second parameter is request URLValidatorFunction func(any) error- function that validates JSON dataOutput any- pointer to output struct that will be filled with dataName string- name of parser
Example parser can be found in github.com/jodua/go-bulkrequest/JSONParser/schemas package.
File issues through Issues tab.
MIT License