Как отправить POST-запрос с двоичным содержимым с помощью сокета - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь создать клиентскую часть, которая может отправлять изображение на сервер с помощью запроса POST, и сервер должен сохранить его. Моя проблема в том, что когда я отправляю запрос со всеми заголовками, он декодируется как 'utf-8', и все '\ r \ n', которые должны разделять заголовок, теперь \\ r \\ n, а не так, как должно быть. Чтобы решить эту проблему, я расшифровал его как 'string_escape', и это сработало. но теперь, когда я пытаюсь добавить двоичное содержимое файла изображения, возникает ошибка, что '\ x' не является допустимым escape, поэтому я удалил декодирование и использовал 3 кавычки для строки, но теперь возникает ошибка, которую он не можетсоедините байты и строки, мне нужна идея, как решить эту проблему с помощью пакета сокетов (а не запросов и т. д.)

спасибо !!

import os

while True:
   my_socket = socket.socket()
   my_socket.connect(('127.0.0.1', 8820))
   header = 'POST /upload HTTP/1.1\r\n'

   while True:
      name = input('what to send ? ')
      if os.path.isfile(name):
          check = input('Do you want send ' + name + '(y/n) : ')
          if check == 'y':
              break
      if os.path.isdir(name):
          os.chdir(name)
      if name == 'ls':
          for i in os.listdir('.'):
              print(i)

# after knowing which file to send
# try to send it but ...
# there is a problem

   file_name = os.path.split(name)[-1]
   content = ''
   with open(name, 'rb') as f:
       content = f.read()
   header += 'file-name:' + file_name + '\r\n\r\n'
   header = f"""POST /upload HTTP/1.1
file-name:{file_name}


"""
   header +=content
   my_socket.send(header)
   data = my_socket.recv(1024)
   print('you got this from server\t\t ' + data)
   my_socket.close()


вот код

...