Maison > développement back-end > Golang > le corps du texte

Comment obtenir des données JSON à partir de la connexion Golang

WBOY
Libérer: 2024-02-06 08:33:04
avant
1122 Les gens l'ont consulté

Comment obtenir des données JSON à partir de la connexion Golang

Contenu de la question

J'utilise une connexion TCP écrite en Golang pour envoyer une requête curl depuis la console. Il s'agit donc essentiellement d'un flux de données. Je peux recevoir les données avec succès et les stocker dans le tampon en utilisant le code suivant

func PushDataToBuffer(bufferedChannel chan []byte, conn net.Conn) {
    defer conn.Close()
    fmt.Println("pushing messages into buffer...")

    buffer := make([]byte, 2048) // 2048 = assumption for reasonable event byte size

    for {
        n, err := conn.Read(buffer)
        if err != nil {
            fmt.Println("read error: ", err)
            continue // to continue listening for connections
        }
        bufferedChannel <- buffer[:n]
    }
}
Copier après la connexion

Mais quand j'essaie de lire ces données en utilisant ce code :

for data := range bufferedChannel {
    fmt.Println("The len of buffer is: ", len(bufferedChannel))
    dataObject := models.Event{}
    err := json.Unmarshal(data, &dataObject)
}
Copier après la connexion

J'obtiens l'erreur suivante

Invalid character 'P' looking for beginning of value
2024/01/29 09:40:31 syntax error at byte offset 1
Copier après la connexion

Quand j'ai imprimé les données elles-mêmes, j'ai vu ceci

POST / HTTP/1.1
Host: localhost:8952
User-Agent: curl/7.77.0
Accept: */*
Content-Type: application/json
Content-Length: 232

{\"customer\":\"Ada\",\"eventtype\":\"BuyingApples\",\"time\":\"0001-01-01T00:00:00Z\",\"specifics\":[{\"Key\":\"Shop\",\"Value\":\"Bakery\"},{\"Key\":\"Location\",\"Value\":\"Downtown\"},{\"Key\":\"recommends\",\"Value\":\"yes\"}]}
Copier après la connexion

De ce qui précède, vous pouvez clairement voir où se situe le problème. Il ajoute des en-têtes aux données, c'est donc POST 中的 P ce dont se plaint Golang. C'est pourquoi je ne peux pas le démonter. Voici donc ma question: Comment envoyer les données au serveur ou les découper au fur et à mesure de leur arrivée, je n'utiliserai que la partie json :

{\"customer\":\"Ada\",\"eventtype\":\"BuyingApples\",\"time\":\"0001-01-01T00:00:00Z\",\"specifics\":[{\"Key\":\"Shop\",\"Value\":\"Bakery\"},{\"Key\":\"Location\",\"Value\":\"Downtown\"},{\"Key\":\"recommends\",\"Value\":\"yes\"}]}
Copier après la connexion

P.S - J'utilise une connexion TCP pour obtenir les données au lieu de http

J'ai cherché diverses solutions en ligne, mais je n'en ai pas trouvé une qui corresponde à mon cas d'utilisation


Réponse correcte


cURL n'est pas un client TCP. Il s'agit d'un client HTTP et génère naturellement des en-têtes natifs du protocole (tels que la méthode et le chemin de la requête). C'est ce qui est finalement envoyé via la connexion TCP. Par conséquent, il existe une inadéquation entre ce que le serveur attend (TCP simple) et ce que le client envoie (HTTP).

Vous devez mettre à jour le code de votre serveur pour analyser les données brutes dans une requête HTTP, telle que http .ReadRequest, ou simplement utiliser un client qui envoie la charge utile attendue sur le réseau - c'est-à-dire TCP simple. Netcat rendra cela facile. Sans savoir grand-chose du problème que vous essayez de résoudre, je recommanderais par défaut cette dernière approche (car pourquoi envoyer HTTP alors que vous avez besoin de TCP en premier lieu ?).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!