【问题标题】:Python send HTTP/S request through port 443Python 通过 443 端口发送 HTTP/S 请求
【发布时间】:2020-03-08 14:40:12
【问题描述】:

我只想使用套接字模块发送请求。 我的目标是获得带有状态码的响应。无论如何,当我通过端口 443 发送请求时,它什么也没有响应

import socket

host = ("www.google.com",80)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(host)

message = '''GET /  HTTP/1.1
Host: www.google.com
Connection: keep-alive



'''
s.send(message.encode())
modifiedMessage = s.recv(2048).decode("ISO-8859-1");
print(modifiedMessage)
s.close()

输出:

HTTP/1.1 200 OK
Date: Sun, 08 Mar 2020 14:35:58 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Server: gws
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Set-Cookie: 1P_JAR=2020-03-08-14; expires=Tue, 07-Apr-2020 14:35:58 GMT; path=/; domain=.google.com; Secure
Set-Cookie: NID=199=E_sNmu747pC1yNz0-2mc4SbQvL65ABXaSlu2DjgZr8S6U56ie5IMHC6BYOOIbVL9oJ2ydA7mbm0DQhLFNwm7Xw1Q7Z7ABtE8Y6Pd0gMy3Py0-DSMxnzVMtgmkBJAojusMBIGvVMsH_QidWUrqjHrTby2vnyY_7Fx2_pvaCEZ90w; expires=Mon, 07-Sep-2020 14:35:58 GMT; path=/; domain=.google.com; HttpOnly
Accept-Ranges: none
Vary: Accept-Encoding
Transfer-Encoding: chunked

6974
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="de"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/logos/doodles/2020/international-womens-day-2020-6753651837108310.2-l.png" itemprop="image"><meta content="Internationaler Frauentag " property="twitter:title"><meta content="Zur Feier des Internationalen Frauentags  #GoogleDoodle #IWD2020" property="twitter:description"><meta content="Zur Feier des Internationalen Frauentags  #GoogleDoodle #IWD2020" property="og:description"><meta content="summary_large_image" property="twitter:card"><meta content="@GoogleDoodles" property="twitter:site"><meta content="https://www.google.com/logos/doodles/2020/international-womens-day-2020-6753651837108310-2xa.gif" property="twitter:image"><meta content="https://www.google.com/logos/doodles/2020/international-womens-day-2020-6753651837108310-2xa.gif" property="og:image"><meta content="818" property="og:image:width"><meta content="460" property="og:image:height"><meta content="https://www.google.com/logos/doodles/2020/international-womens-day-2020-6753651837108310-2xa.gif" property="og:url"><meta content="video.other" property="og:type"><title>Google</title><script nonce="1T1228FRBGn0F7FbqOxhPA==">(function(){window.google={kEI:'zgJlXuORMs

基本上一切正常,但是当我将端口从 80 更改为 443 时,我得到一个空响应

【问题讨论】:

标签: python sockets https


【解决方案1】:

您需要使用ssl 模块中提供的工具,就像在这个示例代码中一样。

import socket
import ssl


message = """GET /  HTTP/1.1
Host: www.google.com
Connection: keep-alive



"""

host = ("www.google.comhttps://docs.python.org/3/library/ssl.html", 443)
purpose = ssl.Purpose.SERVER_AUTH
context = ssl.create_default_context(purpose=purpose)

with socket.create_connection(host) as sock:
    with context.wrap_socket(sock, server_hostname=host[0]) as wrapped:

        wrapped.send(message.encode())
        modifiedMessage = wrapped.recv(2048).decode("ISO-8859-1")
        print(modifiedMessage)

如果您打算在生产代码中执行此操作,您应该查看 ssl 模块文档中的警告和建议。

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2013-01-15
    • 2013-04-16
    • 2017-02-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多