gpt4 book ai didi

python - Python HTTP始终使用套接字301

转载 作者:行者123 更新时间:2023-12-03 12:08:22 25 4
gpt4 key购买 nike

我编写了一个简单的程序,以使用python从网站上获取一些信息。
但是当我运行下面的代码时,它总是返回以下301信息。同时,我的浏览器可以轻松访问该网站。
请告诉我为什么会发生这种情况,以及如何改进我的代码来避免该问题。

HTTP/1.1 301 Moved Permanently
Date: Tue, 28 Aug 2018 14:26:20 GMT
Server: Apache
Referrer-Policy: origin-when-cross-origin
Location: https://www.ncbi.nlm.nih.gov/
Content-Length: 237
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.ncbi.nlm.nih.gov/">here</a>.</p>
</body></html>

import socket

searcher = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
searcher.connect(("www.ncbi.nlm.nih.gov", 80))
cmd = "GET https://www.ncbi.nlm.nih.gov/ HTTP/1.0\r\n\r\n".encode()
searcher.send(cmd)
while True:
data = searcher.recv(512)
if len(data)<1: break
print(data.decode())
searcher.close()

最佳答案

您收到301,因为网站重定向到https站点。

我不知道是否必须使用套接字,但是如果不能使用请求,则它是用于执行http请求的易于使用的库:

import requests

req = requests.get("http://www.ncbi.nlm.nih.gov")
html = req.text

这样,无论如何都可以执行301,但是它是透明的。

如果要使用套接字,则应手动添加“ssl层”:
import socket
import ssl

searcher = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
searcher.connect(("www.ncbi.nlm.nih.gov", 443))
searcher = ssl.wrap_socket(searcher, keyfile=None, certfile=None, server_side=False, cert_reqs=ssl.CERT_NONE, ssl_version=ssl.PROTOCOL_SSLv23)
cmd = "GET https://www.ncbi.nlm.nih.gov/ HTTP/1.0\r\n\r\n".encode()
searcher.send(cmd)
while True:
data = searcher.recv(512)
if len(data) < 1: break
print(data.decode())
searcher.close()

关于python - Python HTTP始终使用套接字301,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52060519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com