initial, server gives 400

This commit is contained in:
Jeffrey Paul 2024-05-20 03:51:53 -07:00
commit d4126c6d17
1 changed files with 128 additions and 0 deletions

128
main.go Normal file
View File

@ -0,0 +1,128 @@
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"os"
)
// SearchRequest represents the structure of the input JSON for the API request.
type SearchRequest struct {
Query string `json:"query"`
Sort string `json:"sort"`
Set string `json:"set"`
Filters []interface{} `json:"filters"`
Limit int `json:"limit"`
VariantLimit bool `json:"variantLimit"`
CollectionLimit bool `json:"collectionLimit"`
Direction string `json:"direction"`
}
// Input represents the top-level structure of the input JSON for the API request.
type Input struct {
Part0 SearchRequest `json:"0"`
Part1 SearchRequest `json:"1"`
}
func main() {
// Parameterize the Limit value
limit := 35
// Define the input data structure
input := Input{
Part0: SearchRequest{
Query: "",
Sort: "relevance",
Set: "*",
Filters: []interface{}{},
Limit: limit,
VariantLimit: false,
CollectionLimit: false,
Direction: "forward",
},
Part1: SearchRequest{
Query: "",
Sort: "relevance",
Set: "*",
Filters: []interface{}{},
CollectionLimit: false,
},
}
// Serialize the input data structure to JSON
jsonData, err := json.Marshal(input)
if err != nil {
logErrorAndExit(fmt.Errorf("failed to marshal input data: %w", err))
}
// URL encode the JSON data
urlEncodedInput := url.QueryEscape(string(jsonData))
// Construct the full URL
apiURL := fmt.Sprintf("https://curiosa.io/api/trpc/card.search,card.count?batch=1&input=%s", urlEncodedInput)
// Create a new HTTP request
req, err := http.NewRequest("GET", apiURL, nil)
if err != nil {
logErrorAndExit(fmt.Errorf("failed to create request: %w", err))
}
// Set headers
setHeaders(req)
// Perform the HTTP request
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
logErrorAndExit(fmt.Errorf("failed to perform request: %w", err))
}
defer resp.Body.Close()
// Check for non-200 status codes
if resp.StatusCode != http.StatusOK {
logErrorAndExit(fmt.Errorf("non-200 response: %s", resp.Status))
}
// Read and pretty print the JSON response
var prettyJSON json.RawMessage
err = json.NewDecoder(resp.Body).Decode(&prettyJSON)
if err != nil {
logErrorAndExit(fmt.Errorf("failed to decode response body: %w", err))
}
prettyData, err := json.MarshalIndent(prettyJSON, "", " ")
if err != nil {
logErrorAndExit(fmt.Errorf("failed to marshal pretty JSON: %w", err))
}
// Output the pretty JSON to stdout
fmt.Println(string(prettyData))
}
// setHeaders sets the necessary headers for the HTTP request.
func setHeaders(req *http.Request) {
req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0")
req.Header.Set("Accept", "*/*")
req.Header.Set("Accept-Language", "en-US,en;q=0.5")
req.Header.Set("Accept-Encoding", "gzip, deflate")
req.Header.Set("Referer", "https://curiosa.io/cards")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("x-build-id", "a68dd8c6f6e3b605951c534ad22e788557cabd0d")
req.Header.Set("x-trpc-source", "nextjs-react")
req.Header.Set("DNT", "1")
req.Header.Set("Sec-GPC", "1")
req.Header.Set("Connection", "keep-alive")
req.Header.Set("Sec-Fetch-Dest", "empty")
req.Header.Set("Sec-Fetch-Mode", "cors")
req.Header.Set("Sec-Fetch-Site", "same-origin")
req.Header.Set("Priority", "u=4")
req.Header.Set("TE", "trailers")
}
// logErrorAndExit logs the error to stderr and exits with a non-zero status code.
func logErrorAndExit(err error) {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}