Je recherche un outil (éventuellement sous Linux) qui me permettra de faire une requête HTTP ou HTTPS manuelle. Par manuel, je le pense vraiment: je devrais pouvoir lui alimenter un fichier texte qui ressemble à
POST /foo HTTP/1.1
Host: www.example.com
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-gb,en;q=0.5
Content-Type: text/plain
Content-Length: 11
Hello world
et une URL de destination (www.example.com/foo), et envoyez la demande à l'URL. Tout au plus, il serait utile que l'en-tête Content_Length soit automatiquement calculé.
Je serais en mesure d'écrire un tel outil en utilisant une bibliothèque comme httplib en Python, mais la raison même pour laquelle j'en ai besoin est de faire une enquête manuelle en cas de problème avec de telles bibliothèques.
Réponses:
wget a une option --post-file qui devrait fonctionner pour vous.
Edit: Il y a aussi Ncat , que vous utiliseriez de la même manière que la suggestion telnet de Randolf Richardson, sauf qu'il prend également en charge SSL / HTTPS:
la source
Pour HTTP (pas HTTPS), une alternative à la commande "wget" qui vient à l'esprit est d'utiliser telnet comme suit:
Le fichier "input.txt" est votre liste de commandes prédéfinies que vous souhaitez envoyer à l'hôte à hostname et le fichier "output.txt" stockera la réponse.
la source
Vous pouvez émettre une demande GET avec OpenSSL:
Notez que vous pouvez également utiliser "HTTP / 2", mais soyez prudent car certains serveurs (par exemple github.com) ne le prennent pas en charge.
la source
Pour moi, cela a la création d' un dossier de demande (exemple:
request.txt
)Et puis appelez la
openssl s_client
commande:cat request.txt | openssl s_client -quiet -connect www.example.com:443
Cependant, soyez prudent sur certains points:
Content-type: text/plain; charset=utf-8
si le fichier est encodé en utf-8.HTTP/1.1 505 HTTP Version Not Supported
, car le protocole HTTP standard utilise CR / LF pour les fins de ligne ( https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html ). Vous pouvez utiliser launix2dos
commande pour effectuer cette conversion.Connection: close
tête pour terminer la demande et revenir de l'appel. Sinon, la commande attendra l'interaction de l'utilisateur, si le serveur répond normalement avec un en-Connection: keep-alive
tête.la source
Je suis surpris que personne n'ait mentionné cURL . Il est fait exactement pour ce que vous voulez faire. Et il est disponible sur pratiquement toutes les plateformes (y compris Windows).
Donc, pour votre exemple, tout ce que vous feriez serait de:
Lequel capturé de Wireshark vous rapportera:
Vous pouvez facilement modifier davantage les en-têtes si vous souhaitez faire toutes sortes de choses (c'est-à-dire changer l'agent utilisateur, etc.).
Edit: Je n'ai pas remarqué l'exigence "à partir d'un fichier". Vous pouvez le faire aussi, soit en simple ascii soit en fichiers binaires. Vous spécifiez simplement le nom de fichier avec un symbole @
la source