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

Faire des requêtes http via une connexion TCP en go

王林
Libérer: 2024-02-09 12:20:09
avant
801 Les gens l'ont consulté

Faire des requêtes http via une connexion TCP en go

l'éditeur php Strawberry vous présentera comment effectuer des requêtes HTTP via des connexions TCP en langage Go. Dans le développement Web, nous avons souvent besoin de communiquer avec d'autres serveurs et d'obtenir des données ou d'envoyer des requêtes. Le langage Go fournit une riche bibliothèque standard, qui contient des fonctions permettant de créer des connexions TCP et d'envoyer des requêtes HTTP. En maîtrisant ces compétences, nous pouvons facilement mettre en œuvre une communication avec d'autres serveurs dans le langage Go pour obtenir et envoyer des données. Ensuite, plongeons-nous dans ce sujet intéressant !

Contenu des questions

package main

import (
    "crypto/tls"
    "fmt"
)

func main() {
    conf := &tls.Config{}
    conn, _ := tls.Dial("tcp", "www.google.com:443", conf)
    data := []byte("GET / HTTP1.1\r\nHost: www.google.com\r\n\r\n")
    conn.Write(data)
    buf := make([]byte, 5000)
    conn.Read(buf)
    fmt.Println(string(buf[:]))
}
Copier après la connexion

J'ai essayé de faire une requête http via des données de connexion TCP brutes, mais j'ai obtenu une réponse d'erreur de 400 requêtes incorrectes, quel est le problème.

Solution

Il y a une erreur dans les données.

http1.1 应为 http/1.1.

Je voulais partager comment j'ai découvert cette faute d'orthographe dans l'espoir que cela aide les autres.

Quand je veux résoudre un problème que je ne connais pas très bien, la première chose que je fais est de découvrir à quoi cela ressemble lorsqu'il fonctionne. J'ai déjà utilisé nc, je vais donc l'essayer d'abord.

Voici un exemple tiré de la page de manuel nc : 

$ printf "get / http/1.0\r\n\r\n" | nc host.example.com 80
Copier après la connexion

Alors j'ai mis en premier host.example.com 替换为 www.google.com :

$ printf "get / http/1.0\r\n\r\n" | nc www.google.com 80
Copier après la connexion

Ça marche !

Puis ajoutez http/1.0 替换为 http/1.1. Fonctionne encore!

Puis ajoutez l'en-tête host :

$ printf "get / http/1.1\r\nhost: www.google.com\r\n\r\n" | nc www.google.com 80
Copier après la connexion

Ça marche !

Copiez ensuite la chaîne dans la question :

$ printf "GET / HTTP1.1\r\nHost: www.google.com\r\n\r\n" | nc www.google.com 80
Copier après la connexion

Je l'ai compris cette fois 400 错误请求.

C'est un grand pas en avant ! Il y a eu un problème avec la demande. Les erreurs de frappe sont faciles à repérer en comparant les deux requêtes.

Enfin, corrigez la faute de frappe dans la démo d'origine et exécutez la démo pour vérifier que le problème a été résolu. Finition!

Merci d'avoir lu !

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!

Étiquettes associées:
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!