Приватный сокет сервер не понял запрос - PullRequest
0 голосов
/ 25 апреля 2020
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(("privnote.com", 80))
#s = ssl.wrap_socket(s, keyfile=None, certfile=None, server_side=False, cert_reqs=ssl.CERT_NONE, ssl_version=ssl.PROTOCOL_SSLv23)

def claim_note(note_url):
    s.sendall(b'DELETE /'+note_url.encode()+b'HTTP/1.1\r\nX-Requested-With: XMLHttpRequest\r\nHost: privnote.com\r\n')
    print(s.recv(4096))

Это мой код, теперь позвольте мне начать с того, что я пробовал очень много разных вещей, кроме этого. Я пробовал порт https и порт http, 443, 80. Я прокомментировал и раскомментировал утверждение, которое оборачивает сокет с помощью ssl. Все с одинаковым результатом. Либо API, возвращающий абсолютно ничего, либо API, сообщающий мне, что запрос не может быть понят сервером. Я смотрел на репозиторий GitHub, и использовался только один заголовок, потому что это было для вызова Ajax, который был запрошен с помощью x. Я попытался добавить тип контента агента пользователя, и теперь я просто использую host и x, запрошенные с. Это запрос DELETE, а URL - первые 8 символов после ссылки. Я также попытался добавить \ r \ n \ r \ n в конце и даже пробовал длину содержимого. Я не знаю, что еще делать. Я хочу знать, почему сервер так говорит.

1 Ответ

1 голос
/ 25 апреля 2020

Есть несколько проблем с вашим кодом. Если вы фактически распечатываете запрос, который вы пытаетесь отправить, он будет выглядеть так:

b'DELETE /node_urlHTTP/1.1\r\nX-Requested-With: XMLHttpRequest\r\nHost: privnote.com\r\n'

С этой строкой связаны две проблемы: пробел между /node_url и HTTP/1.1 и финал \r\n als маркер конца заголовка в конце. Как только они будут исправлены, вы получите успешный ответ - перенаправление 302 на версию HTTPS:

b'HTTP/1.1 302 Found\r\nDate:...\r\nLocation: https://privnote.com/node_url ...

При повторении запроса с HTTPS и действительным node_url (с недействительным node_url вы получите ошибку, что DELETE не является разрешенный метод):

s.connect(("privnote.com", 443))
s = ssl.wrap_socket(s)

...
b'HTTP/1.1 200 OK\r\n ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...