@Maratk1n

Получение данных на сервере python (socket)?

Пытаюсь подключить Callback API к моему серверу, но не могу обработать post-запрос питоновским скриптом.
Как видно запросы на сервер приходят.
root@voland:~/vkserver# tcpdump -s 0 -A port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:59:06.714024 IP srv203-173-240-87.vk.com.22149 > voland.http: Flags [S], seq 3222190594, win 14600, options [mss 1460,sackOK,TS val 16552907 ecr 0,nop,wscale 9], length 0
E..<).@.8.6.W.......V..P..........9............
...........
18:59:06.714079 IP voland.http > srv203-173-240-87.vk.com.22149: Flags [S.], seq 661474302, ack 3222190595, win 14480, options [mss 1460,sackOK,TS val 3664387 ecr 16552907,nop,wscale 4], length 0
E..<..@.@.Xc....W....PV.'mK.......8............
.7..........
18:59:06.766049 IP srv203-173-240-87.vk.com.22149 > voland.http: Flags [.], ack 1, win 29, options [nop,nop,TS val 16552920 ecr 3664387], length 0
E..4).@.8.6.W.......V..P....'mK............
.....7..
18:59:06.766125 IP srv203-173-240-87.vk.com.22149 > voland.http: Flags [P.], seq 1:174, ack 1, win 29, options [nop,nop,TS val 16552920 ecr 3664387], length 173
E...).@.8.5.W.......V..P....'mK......?.....
.....7..POST / HTTP/1.1
User-Agent: curl/7.26.0
Host: 212.237.7.176
Accept: */*
Content-Type: application/json
Content-Length: 43

{"type":"confirmation","group_id":643042}
18:59:07.015510 IP srv203-173-240-87.vk.com.22149 > voland.http: Flags [P.], seq 1:174, ack 1, win 29, options [nop,nop,TS val 16552983 ecr 3664387], length 173
E...).@.8.5.W.......V..P....'mK............
.....7..POST / HTTP/1.1
User-Agent: curl/7.26.0
Host: 212.237.7.176
Accept: */*
Content-Type: application/json
Content-Length: 43

Скрипт на python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket
import logging

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
try:
        sock.bind(('0.0.0.0', 80))
except Exception:
        logging.exception('processing request')
sock.listen(1)

while True:
        conn, addr = sock.accept()
        print('connected:'+str(addr))
        #conn.settimeout(10)
        data = conn.recv(1024)
        if not data:
                break
        conn.send('2fc3d')
conn.close()

Обернул bind в try, потому что постоянно вылезает ошибка [ERROR] Address already in use (socket.SO_REUSEADDR не помогает). Если вкратце, при подключении клиента к серверу, я должен вернуть строку "2fc3d", но у меня висит на строке
conn, addr = sock.accept()
т.е. постоянно ждет подключения. В чем может быть проблема?
  • Вопрос задан
  • 1385 просмотров
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch Куратор тега Linux
3D специалист. Dолго, Dорого, Dерьмово.
Вы биндитесь на порт 80, на котором, похоже, у вас уже работает web-сервер. Поэтому у вас bind вылетает с ошибкой. Или поменяйте номер порта в вашем скрипте, или остановите веб-сервер.
И что значит "callback к к моему серверу"?!
Если вы пытаетесь из существующего веб-сервера вызвать питоновский скрипт, то бинд вам совсем не нужен, а нужно что-то типа cgi/wsgi или proxy... Но чтобы сказать точнее, нужно знать, что из себя этот ваш веб-сервер представляет, и что у него за callback api.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы