Solicitação HTTP (S) manual

8

Estou procurando uma ferramenta (possivelmente no Linux) que me permita fazer uma solicitação HTTP ou HTTPS manual. Por manual, eu realmente quis dizer isso: eu deveria ser capaz de alimentá-lo com um arquivo de texto que se parece com

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

e um URL de destino (www.example.com/foo) e envie a solicitação para o URL. No máximo, seria útil se o cabeçalho Content_Length fosse calculado automaticamente.

Eu seria capaz de escrever tal ferramenta usando alguma biblioteca como o httplib em Python, mas a razão pela qual eu preciso é fazer uma investigação manual quando algo der errado com essas bibliotecas.

    
por Andrea 18.07.2011 / 22:32

4 respostas

9

wget tem uma opção --post-file que deve funcionar para você.

Edit: Além disso, há Ncat , que você usaria de forma semelhante ao telnet de Randolf Richardson sugestão, exceto que também suporta SSL / HTTPS:

ncat -C --ssl www.example.com 443 < input.txt > output.txt
    
por 18.07.2011 / 22:42
6

Para HTTP (não HTTPS), uma alternativa para o comando "wget" que vem à mente é usar o telnet da seguinte forma:

  • nome do host do telnet 80 < input.txt > output.txt

O arquivo "input.txt" é sua lista de comandos pré-configurados que você deseja alimentar ao host em hostname e o arquivo "output.txt" armazenará a resposta.

    
por 18.07.2011 / 22:54
0

Você pode enviar uma solicitação GET com o OpenSSL:

openssl s_client -quiet -connect superuser.com:443 <<eof
GET / HTTP/1.0
Host: superuser.com

eof

Note que você também pode usar "HTTP / 2.0", mas tenha cuidado porque alguns servidores (por exemplo, github.com) não são compatíveis.

    
por 22.01.2018 / 06:04
-1

Estou surpreso que ninguém tenha mencionado cURL . É feito exatamente para o que você deseja fazer. E está disponível em praticamente qualquer plataforma (incluindo o Windows).

Portanto, para o seu exemplo, tudo o que você faria é:

curl -H 'Content-Type: text/plain' -d 'Hello World' www.example.com

Que capturado no Wireshark te renderá:

POST / HTTP/1.1
User-Agent: curl/7.19.7 (x86_64-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15
Host: www.example.com
Accept: */*
Content-Type: text/plain
Content-Length: 11

Hello world

Você pode facilmente modificar os cabeçalhos se quiser fazer todo tipo de coisas (ou seja, alterar o user agent, etc).

Editar: não percebeu o requisito "de um arquivo". Você pode fazer isso também, seja em arquivos ascii ou binários simples. Você acabou de especificar o nome do arquivo com um símbolo @

-d @/tmp/HelloWorldFile
    
por 20.07.2011 / 22:46