Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 23, 2014 09:53:26

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

socket-клиент

Необходимо написать простой HTTP-клиента для получения главной страницы сайта, используя сокет.
Установил openserver и пробую получить исходники главной страницы.

import socket
HOST = '127.0.0.1'
PORT = 80
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(b"Hello! \n") # без него соединение просто закрывается
data = s.recv(1024)
print(data.decode("utf-8"))
s.close()

В итоге получаю
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Cannot process request!</title>
<link rev="made" href="mailto:%5bno%20address%20given%5d" />
<style type="text/css"><!--/*--><![CDATA[/*><!--*/ 
    body { color: #000000; background-color: #FFFFFF; }
    a:link { color: #0000CC; }
    p, address {margin-left: 3em;}
    span {font-size: smaller;}
/*]]>*/--></style>
</head>
<body>
<h1>Cannot process request!</h1>
<p>
    The server does not support the action requested by the browser.
</p>
<p>
If you think this is a server error, please contact
the <a href="mailto:%5bno%20address%20given%5d">webmaster</a>.

Помогите, пожалуйста, отправить корректный запрос

Отредактировано Moi5es (Дек. 23, 2014 10:15:41)

Офлайн

#2 Дек. 23, 2014 10:16:35

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

socket-клиент

Раз Вы пишите HTTP-клиент, Вам придётся соблюдать HTTP протокол.
https://ru.wikipedia.org/wiki/HTTP

Офлайн

#3 Дек. 23, 2014 11:14:05

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

socket-клиент

Заменил в соответствии с требованиями протокола HTTP

import socket
HOST = '127.0.0.1'
PORT = 80
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(b'''
GET / HTTP/1.0
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
Connection: close
\r\n\r\n''')
data = s.recv(1024)
print(data.decode("utf-8"))
s.close()

Получаю HTTP-заголовки от сервера, а самого тела нет
HTTP/1.1 200 OK
Date: Tue, 23 Dec 2014 09:11:32 GMT
Server: Apache/2.4.10 (Win32)
Last-Modified: Tue, 14 Feb 2012 17:53:45 GMT
ETag: "0-4b8f046bc47a5"
Accept-Ranges: bytes
Content-Length: 0
Connection: close
Content-Type: text/html




Отредактировано Moi5es (Дек. 23, 2014 13:45:56)

Офлайн

#4 Дек. 25, 2014 07:45:26

Moi5es
Зарегистрирован: 2014-10-15
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

socket-клиент

Запрос в netcat тоже отдает пустое тело. Проверил на запросе ya.ru, всё работает. Скорее всего дело в openserver.
Благодарю всех, кто откликнулся.

Отредактировано Moi5es (Дек. 25, 2014 07:46:00)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version