python套接字如何使用相同的套接字连接正确重定向http / s请求?

markmark123

我在这里有一个发送HTTPS请求的代码。我的问题是使用相同的套接字连接处理重定向请求。

我知道requests模块可以很好地处理此重定向,但是此代码用于我正在开发的代理服务器。

任何帮助,将不胜感激。谢谢!

import socket, ssl
from ssl import SSLContext

HOST = "www.facebook.com"
PORT = 443

ContextoSSL = SSLContext(protocol=ssl.PROTOCOL_SSLv23)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sslSocket = ContextoSSL.wrap_socket(sock, server_hostname=HOST)
sslSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sslSocket.connect((HOST, PORT))
sslSocket.do_handshake()

der = sslSocket.getpeercert(binary_form=True)
pem_data = ssl.DER_cert_to_PEM_cert(der)
#print(pem_data) # print certificate



'''1st request'''
headers = \
    "GET / HTTP/1.1\r\n"\
    "Host: www.facebook.com\r\n"\
    "User-Agent: python-requests/2.22.0\r\n"\
    "Accept-Encoding: gzip, deflate\r\nAccept: */*\r\n"\
    "Connection: keep-alive\r\n\r\n"
print("\n\n" + headers)

sslSocket.send(headers.encode()) # send request
response = sslSocket.recv(9999)
print(response) # print receive response




'''2nd request''' # on this redirect with cookie set, response should be 200 OK 
cookie, location = "", ""
for line in response.decode().splitlines():
    if "Set-Cookie" in line:
        cookie = line.replace("Set-Cookie: ", "").split(";")[0]

    if "Location" in line:
        location = line.replace("Location: ", "").split("/")[3]

print(cookie, location)

headers = \
    f"GET /{location} HTTP/1.1\r\n"\
    "Host: www.facebook.com\r\n"\
    "User-Agent: python-requests/2.22.0\r\n"\
    "Accept-Encoding: gzip, deflate\r\nAccept: */*\r\n"\
    "Connection: keep-alive\r\n"\
    f"Cookie: {cookie}\r\n\r\n"
print("\n\n" + headers)

sslSocket.send(headers.encode()) # send request
response = sslSocket.recv(9999)
print(response) # print received response
斯蒂芬·乌尔里希(Steffen Ullrich)

要处理重定向,您必须首先获取新位置:

  • 首先按照HTTP标准中的规定正确读取响应,即根据响应中声明的长度读取整个正文
  • 解析响应
  • 检查指示重定向的响应代码
  • 如果是重定向,则从Location响应头中字段中提取新位置

一旦有了新位置,就可以发出对该位置的新请求。如果新位置用于同一域,并且请求和响应都指示可以重新使用TCP连接,则可以尝试在同一TCP连接上发出新请求。但是您需要处理服务器可能仍然关闭连接的情况,因为明确允许这样做。

在所有其他情况下,您必须为新请求创建一个新的TCP连接。

请注意,向您展示如何精确地编写代码将太广泛了。HTTP库存在的原因是您最好用于此目的,而不是自己实现所有复杂性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

接收套接字请求,通过各个端点,并使用骆驼中的netty响应回相同的套接字连接

来自分类Dev

使用套接字的HTTP请求

来自分类Dev

套接字挂断错误与多个http.get请求

来自分类Dev

使用原始套接字的ping请求失败

来自分类Dev

无法通过Perl套接字发送管道HTTP请求

来自分类Dev

python套接字错误请求400

来自分类Dev

套接字HTTP请求返回无效的GZIP

来自分类Dev

使用null检查Java从套接字读取HTTP请求

来自分类Dev

在C中使用套接字的HTTP请求

来自分类Dev

使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

来自分类Dev

如何使用Java套接字HTTP / 1.1请求下载图像?

来自分类Dev

HTTP不套接字Web请求-D

来自分类Dev

带套接字的Python GET请求-400错误的请求

来自分类Dev

Connection:keep-alive没有在NodeJS中保持HTTP请求的套接字连接

来自分类Dev

在HashLink上使用套接字读取HTTP请求

来自分类Dev

错误的请求套接字python

来自分类Dev

接收套接字请求,通过各个端点,并使用骆驼中的netty响应回相同的套接字连接

来自分类Dev

python套接字错误请求400

来自分类Dev

如何在Java中使用套接字打印/获取传入的HTTP POST请求的有效负载(带有套接字)

来自分类Dev

套接字还是HTTP POST请求?

来自分类Dev

使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

来自分类Dev

通过套接字连接发送多个请求

来自分类Dev

如何通过套接字发送HTTPS请求?

来自分类Dev

如何在Java中使用相同的套接字连接执行多个HTTP请求?

来自分类Dev

Java套接字收到HTTP / 1.1 400错误请求

来自分类Dev

确定重定向套接字打开请求的预期 IP 的 POSIX 调用是什么?

来自分类Dev

Java、HTTP 和套接字:何时停止读取请求但保持套接字打开?

来自分类Dev

如何使用多线程从套接字读取请求

来自分类Dev

如何在 Dart 中将 stdin 套接字转换为请求套接字?

Related 相关文章

  1. 1

    接收套接字请求,通过各个端点,并使用骆驼中的netty响应回相同的套接字连接

  2. 2

    使用套接字的HTTP请求

  3. 3

    套接字挂断错误与多个http.get请求

  4. 4

    使用原始套接字的ping请求失败

  5. 5

    无法通过Perl套接字发送管道HTTP请求

  6. 6

    python套接字错误请求400

  7. 7

    套接字HTTP请求返回无效的GZIP

  8. 8

    使用null检查Java从套接字读取HTTP请求

  9. 9

    在C中使用套接字的HTTP请求

  10. 10

    使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

  11. 11

    如何使用Java套接字HTTP / 1.1请求下载图像?

  12. 12

    HTTP不套接字Web请求-D

  13. 13

    带套接字的Python GET请求-400错误的请求

  14. 14

    Connection:keep-alive没有在NodeJS中保持HTTP请求的套接字连接

  15. 15

    在HashLink上使用套接字读取HTTP请求

  16. 16

    错误的请求套接字python

  17. 17

    接收套接字请求,通过各个端点,并使用骆驼中的netty响应回相同的套接字连接

  18. 18

    python套接字错误请求400

  19. 19

    如何在Java中使用套接字打印/获取传入的HTTP POST请求的有效负载(带有套接字)

  20. 20

    套接字还是HTTP POST请求?

  21. 21

    使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

  22. 22

    通过套接字连接发送多个请求

  23. 23

    如何通过套接字发送HTTPS请求?

  24. 24

    如何在Java中使用相同的套接字连接执行多个HTTP请求?

  25. 25

    Java套接字收到HTTP / 1.1 400错误请求

  26. 26

    确定重定向套接字打开请求的预期 IP 的 POSIX 调用是什么?

  27. 27

    Java、HTTP 和套接字:何时停止读取请求但保持套接字打开?

  28. 28

    如何使用多线程从套接字读取请求

  29. 29

    如何在 Dart 中将 stdin 套接字转换为请求套接字?

热门标签

归档