#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 .