#python #sockets #http
#python #сокеты #http
Вопрос:
Я создаю программу на python для получения HTML-кода из URL-адреса с помощью http-запроса. Я попробовал это, используя страницу на тестовом веб-сервере, которую я создал для этого, и она сработала с этим запросом:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 8080))
s.send(("GET / HTTP/1.1rnHost: localhost:8080").encode("utf8"))
x = s.recv(1024)
while not x:
x = s.recv(1024)
print(x.decode("utf8"))
Но когда я пробую его на другом сайте, он выдает неверный запрос. Как мне сделать этот http действительным для каждого сайта?
И как бы я добавил в это значения get и post?
Комментарии:
1. Зачем вам пытаться создать протокол HTTP с нуля на необработанном сокете? Используйте HTTP-библиотеку, такую как
requests
.2. HTTP является стандартом. Вы явно нарушаете стандарт. Вот почему вы получаете «неверный запрос». В частности
rnrn
, в этом конкретном случае вам не хватает a в конце. Но HTTP намного сложнее, чем это, а затем есть также HTTPS и и … Если вы действительно хотите реализовать все самостоятельно, пожалуйста, сначала изучите стандарт . Если вы просто хотите сделать запрос, просто используйте библиотеку, которая уже обрабатывает эту сложность.
Ответ №1:
Самый простой способ
import requests
r = requests.get("https://www.stackoverflow.com")
print (r.text)
Комментарии:
1. Спасибо, но как мне добавить к этому значения get или post?
Ответ №2:
Если вы пытаетесь избежать пакетов pip, вы все равно можете выполнить http-запрос с помощью стандартной библиотеки.
from urllib.request import urlopen
print(urlopen('http://localhost:8080').read())
Я думаю, что это возможно с тем, как вы это делаете. Вам может понадобиться другой заголовок для конкретного сайта, но я не могу сказать, если вы не предоставите нам веб-сайт. Но реализация http-клиента на python похожа на изобретение колеса.