Maison  >  Article  >  développement back-end  >  Faire des requêtes http via une connexion TCP en go

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

王林
王林avant
2024-02-09 12:20:09799parcourir

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[:]))
}

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

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

Ç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

Ç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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer