python - 如何使用 pysocks python 发送 https reuqest
问题描述
一切正常,只有如何使用 Pysocks 发送 https 请求?
import socks
s = socks.socksocket()
s.set_proxy(socks.HTTP, "proxy", port)
s.connect(("example.com", 443))
request = "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nSec-Fetch-Site: none\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-Dest: document\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7\r\n\r\n"
s.sendall(request.encode())
result = s.recv(4096)
while (len(result) > 0):
print(str(result))
result = s.recv(1024)
result
回复
Process finished with exit code 0
解决方案
要安全连接,HTTPS
您需要ssl作为原始套接字上的包装器。
import socks
import ssl
s = socks.socksocket()
#s.set_proxy(socks.HTTP, "proxy", port) # I don't have proxy server
s.connect(("httpbin.org", 443))
ss = ssl.wrap_socket(s, keyfile=None, certfile=None, server_side=False, cert_reqs=ssl.CERT_NONE, ssl_version=ssl.PROTOCOL_SSLv23)
request = "GET /get HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nSec-Fetch-Site: none\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-Dest: document\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7\r\n\r\n"
ss.sendall(request.encode())
result = ss.recv(4096)
while result:
print(result.decode())
result = ss.recv(1024)
我用真正的 url https://httpbin.org/get测试了它,它将所有数据发送回服务器。
HTTP/1.1 200 OK
Date: Fri, 18 Dec 2020 02:23:27 GMT
Content-Type: application/json
Content-Length: 733
Connection: close
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
{
"args": {},
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
"Host": "example.com",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-5fdc129f-055e9976503fef011cc031c0"
},
"origin": "217.99.86.56",
"url": "https://example.com/get"
}
编辑:
它也适用于本地TOR代理服务器
s.set_proxy(socks.SOCKS5, "localhost", 9050) # TOR proxy server
推荐阅读
- office-js - 如何为桌面版 Office 部署 ExcelApi 中的错误/性能修复,以及 Web Excel 加载项所需的 JavaScript 文件
- angular - Angular CanActivate 守卫 - createUrlTree 相对导航
- r - 在数据框中使用计算总是会导致错误:非数字参数
- c# - 将字符串拆分为 3 个不同的数组
- node.js - Autodesk Forge - 如何使用新的 Model Derivative IFC 管道?
- css - 具有子类父级的 LESS 选择器
- node.js - nodejs中的mqtt文件传输?(使用 mqtt.js)
- javascript - 你如何(或者你能)如何在 JOVO 的 Intents 中运行异步代码?
- android - 在 ConstraintLayout 中可以链接多少个视图(添加关系)
- mysql - 按A列分组并按B列排序时查找行ID