Jump to content

HTTP Requests


Guest gnoo

Recommended Posts

Saudações,

 

estou a tentar fazer um script em python para detectar servidores web ativos mas estou com dificuldades em fazer as requisições, a minha dificuldade está a ser com o metodo GET, eu não tenho bem a certeza mas acho que estou a falhar na versão do protocolo, ou então é o servidor que está bloquear essa requisição, segue o script:

from socket import *


sock = socket(AF_INET, SOCK_STREAM)

sock.connect_ex(("google.com", 80))

sock.send(b" GET / HTTP/1.0\r\n\r\n")

resposta = sock.recv(1024)

print(resposta.decode())

a resposta é:

Citar

HTTP/1.0 400 Bad Request
Content-Length: 54
Content-Type: text/html; charset=UTF-8
Date: Sun, 29 Apr 2018 18:23:52 GMT

<html><title>Error 400 (Bad Request)!!1</title></html>

  Noutros servidores é possivel fazer essa requisição, mediante o ajuste da versão do protocolo, até agora só encontrei um...

Estou a fazer alguma coisa mal ??? 

 

Cumprimentos

Obrigado

 

Link to comment
Share on other sites

Mas se fizer com telnet  a resposta é positiva 

Citar

telnet www.google.com 80
Trying 216.58.201.196...
Connected to www.google.com.
Escape character is '^]'.
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Sun, 29 Apr 2018 21:28:00 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
 

Não percebo

 

Link to comment
Share on other sites

3 minutos atrás, gnoo disse:

Mas há aqui um servidor que tenho estado a tentar e para ele o espaço não importa muito ele aceita a requisição... Porquê que será??... 

Bom, cada servidor tem uma implementação de código diferente para parsear o request.
Por exemplo, o servidor do Google aceita que você use apenas \n para separar cada campo do header.
Mas alguns outros servidores exigem a sequência \r\n.

Por isso é bom sempre seguir o padrão de cada especificação. A especificação é a única garantia de que vai funcionar em qualquer implementação.
Um espaço a mais ou caractere a menos pode funcionar em servidor X mas dar erro em servidor Y.

Link to comment
Share on other sites

Já percebi mais ou menos como funciona... Nos métodos GET e HEAD ( foram os que eu experimentei ), deve ser identificado o  tipo de método a usar como o protocolo e a sua versão, e em seguida deve ser identificado o Host. Assim os resultados são mais consistentes..

 

Captura de ecrã_2018-04-30_15-57-07.png

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...