Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Python: Сети

Войти
Регистрация
Восстановить пароль
 
Albaz
-121 / 2 / 0
Регистрация: 31.05.2013
Сообщений: 380
#1

Создать http запрос используя socket - Python

01.02.2017, 18:56. Просмотров 644. Ответов 5
Метки нет (Все метки)

Как используя только socket-либ создать полноценный заголовок - протокол, юзерагент и тд... В общем, интересуют только низкоуровневые варианты.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import socket
 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print socket.gethostbyname('2ip.ru')
print socket.gethostbyaddr('127.0.0.1')
sock.connect(('2ip.ru', 80))
sock.send("HEAD / HTTP/1.0\n") # вот тут тормозит
 
data = sock.recv(1024)
sock.close()
 
udata = data.decode("utf-8")
print udata
input()
Добавлено через 7 часов 37 минут
В общем все дело в
Python
1
("\r\n")
, вернее в
Python
1
sock.send("\r\n")
Но почему-то косо работает, зависит от
Python
1
sock.send("Host: google.ru \r\n")
Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import socket
 
sock = socket.socket()
print socket.gethostbyname('2ip.ru')
print socket.gethostbyaddr('127.0.0.1')
sock.connect(('google.ru', 80))
sock.send("GET / HTTP/1.1 \r\n")
sock.send("Accept: */*")
sock.send("Accept-Language: ru \r\n")
sock.send("User-Agent: HTTPClient \r\n")
#sock.send("Host: google.ru \r\n")
sock.send("\r\n")
data = sock.recv(1024)
sock.close()
 
udata = data.decode("utf-8")
print udata
input()
выдает в консоли:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
HTTP/1.1 302 Found
 
Cache-Control: private
 
Content-Type: text/html; charset=UTF-8
 
Location: [url]http://www.google.ru/?gfe_rd=cr&ei=dQGSWMOXEs3EZMzrlYgJ[/url]
 
Content-Length: 256
 
Date: Wed, 01 Feb 2017 15:40:37 GMT
 
 
 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.ru/?gfe_rd=cr&amp;ei=dQGSWMOXEs3EZMzrlYgJ">here</A>.
 
</BODY></HTML>
Если же включить
Python
1
sock.send("Host: google.ru \r\n")
, то итог в ссылке будет иным.
Вот какой скрипт:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import socket
 
sock = socket.socket()
print socket.gethostbyname('2ip.ru')
print socket.gethostbyaddr('127.0.0.1')
sock.connect(('google.ru', 80))
sock.send("GET / HTTP/1.1 \r\n")
sock.send("Accept: */*")
sock.send("Accept-Language: ru \r\n")
sock.send("User-Agent: HTTPClient \r\n")
sock.send("Host: google.ru \r\n")
sock.send("\r\n")
data = sock.recv(1024)
sock.close()
 
udata = data.decode("utf-8")
print udata
input()
дает итог:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
HTTP/1.1 301 Moved Permanently
 
Location: [url]http://www.google.ru/[/url]
 
Content-Type: text/html; charset=UTF-8
 
Date: Wed, 01 Feb 2017 15:47:33 GMT
 
Expires: Fri, 03 Mar 2017 15:47:33 GMT
 
Cache-Control: public, max-age=2592000
 
Server: gws
 
Content-Length: 218
 
X-XSS-Protection: 1; mode=block
 
X-Frame-Options: SAMEORIGIN
 
 
 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.ru/">here</A>.
 
</BODY></HTML>
Т.е. меняется ссылка
HTML5
1
<A HREF="http://www.google.ru/">here</A>
на
HTML5
1
<A HREF="http://www.google.ru/?gfe_rd=cr&amp;ei=dQGSWMOXEs3EZMzrlYgJ">here</A>
Ну и в любом случае, полноценную страницу № 200 так и не удается получить...


Да, и из аргумента
Python
1
sock = socket.socket()
выкинул всякие там
Python
1
(socket.AF_INET, socket.SOCK_STREAM)
без к-либо изменений. Почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2017, 18:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать http запрос используя socket (Python):

socket & HTTP: отправка нетекстового файла - Python
Пишу простеньких HTTP сервер на основе модуля socket. Встала проблема в нормальной отправки файлов. Полный код приводить не вижу смысла,...

Windows socket server python + socket client js - Python
Здравствуйте пытаюсь решить такую задачу, на веб странице реализовал soket клиент на js, и socket server, сокет сервер получает данные от...

Используя SQL запрос, найти записи в Frequencies, в которых len больше num - Python
Есть база данных с таблицей Coordinates, которая содержит координаты отрезка x1, x2 на координатной оси. 1.Используя SQL запрос,...

Создать файл *.mdb, используя библиотеку pyodbc - Python
Добрый день! Впервые использую библиотеку pyodbc. Пытаюсь создать *.mdb файл у себя на компе. В Гугле пишут, что надо сначала создать...

Используя модуль нампи создать массив вещественных чисел - Python
Нужно создать массив вещественных чисел(от 0.0 до 100.0) с помощью модуля numpy. Добавлено через 56 минут ##import numpy as np ##a...

Как отправить запрос по https, используя socket()? - C#
Здраствуйте уважаемые знатоки C# технологий. После целого дня, потраченного на то чтобы запарсить один сайт.. я понял, что оказывается...

5
Albaz
-121 / 2 / 0
Регистрация: 31.05.2013
Сообщений: 380
02.02.2017, 22:07  [ТС] #2
Что то тихо совсем))
Порассуждаем сам - на -сам))
Что то и с почтой не получается...
Python
1
2
3
4
5
6
7
8
9
10
import socket
 
sock = socket.socket()
sock.connect(('pop3.mail.ru', 110))
sock.send("\r\n")
data = sock.recv(1024)
udata = data.decode("utf-8")
print udata
sock.close()
input()
Результат:
Bash
1
2
>>> 
+OK
Очень скромненький, хотя и положительный... А дальше никакие команды USER PASS не работают((
0
Avazart
03.02.2017, 21:19
  #3

Не по теме:

Цитата Сообщение от Albaz Посмотреть сообщение
Что то тихо совсем))
Во первых через сокеты это изврат, во вторых у вас репа минусовая так что не удивляйтесь.

0
null_0
1 / 1 / 0
Регистрация: 09.10.2016
Сообщений: 28
Завершенные тесты: 2
12.02.2017, 21:04 #4
Avazart,
Цитата Сообщение от Avazart Посмотреть сообщение
через сокеты это изврат
А через что, простите?
0
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,948
Записей в блоге: 17
12.02.2017, 21:25 #5
Цитата Сообщение от null_0 Посмотреть сообщение
А через что, простите?
requests, curl ?
0
Вованя
126 / 134 / 48
Регистрация: 20.02.2014
Сообщений: 469
18.02.2017, 17:54 #6
Albaz, RFC SNMP, RFC HTTP
0
18.02.2017, 17:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2017, 17:54
Привет! Вот еще темы с ответами:

Запрос GET в http используя TClientSocket - C++ Builder
Добрый день, пытаюсь получить ответ от сайта, но всегда получаю 400 Bad Request. Может кто с таким сталкивался и может подсказать в чем...

Не получается передать POST запрос, используя pear http - PHP
Здравствуйте, столкнулся со следующей проблемой. Есть 5 одинаковых скриптов (script1.php, script2.php .... script5.php). Каждый скрипт...

Невозможно создать Socket: Socket sock = new Socket(someHostString,somePortInt); - Java Сети
Народ! Помогите пожалуйста. Вся красота губится на exception что выскакивает в момент создания сокета: Socket sock = new...

Socket.http - Lua
Я приветствую коллеги. По сетевому программированию на Lua так ничтожно мало ифнормации, что вот приходится с простецкими вопросами к вам...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru