Допустимый HTTP-запрос

#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 похожа на изобретение колеса.