Что не так с urllib.request.Запрос (url=,данные)

#python-3.x

#python-3.x

Вопрос:

Я тестирую код изhttp://docs.python.org/py3k/library/urllib.request.html на моем компьютере (Ubuntu 10.04 и python 3.2)

 >>> import urllib.request
>>> req = urllib.request.Request(url='https://localhost/cgi-bin/test.cgi',
... data=b'This data is passed to stdin of the CGI')
>>> f = urllib.request.urlopen(req)
>>> print(f.read().decode('utf-8'))
Got Data: "This data is passed to stdin of the CGI"
  

используйте сервер

 python3 -m http.server
  

при открытии url получите сообщение следующего содержания (запрос):

 ......
ssl.SSLError: [Errno 1] _ssl.c:390: error:140770FC:SSLroutines:SSL23_GET_SERVER_HELLO:unknown protocol

During handling of the above exception, another exception occurred:
......
urllib.error.URLError: <urlopen error [Errno 1] _ssl.c:390: error:140770FC:SSL     routines:SSL23_GET_SERVER_HELLO:unknown protocol>
  

Есть предложения?Большое спасибо.

Ответ №1:

SSL добавляет шифрование к основной связи, которая происходит через HTTP. Это означает, что обычное соединение увидит это как данные crud, если вы не используете библиотеку SSL.

Комментарии:

1. Спасибо за ответ. Теперь мой код выглядит так: url=’ localhost:8000/cgi-bin/test.cgi ‘; обработчик=urllib.request. HTTPSHandler(url); opener=urllib.request.build_opener(обработчик); f = opener.open(url,data=b’ Эти данные передаются в stdin CGI’).Но сообщение об ошибке в виде:»urllib.ошибка. HTTPError: ошибка HTTP 501: неподдерживаемый метод (‘POST’)»

2. Извините, на данный момент я знаю, что это мои ошибки.

3. Итак, каков ответ? Вы можете опубликовать это как отдельный ответ на этот пост. Я пришел сюда в поисках решения, но не смог его найти.

4. @joar Вы должны добавить переменную в открыватель, в данном случае называемую обработчиком. Ранее вы создали обработчик с urllib.request. HTTPSHandler(url) вместо простого использования urllib.request(url).

5. Но я все равно не вижу httpshandler … в документах docs.python.org/3.0/library/urllib.request.html .