当前位置: 首页 > 知识库问答 >
问题:

使用Python的get请求失败

笪建章
2023-03-14

我正在读《网络爬行的终极指南》一书。

用于运行第一个HTTP get-request的代码如下:

import requests 
url = "https://scrapethissite.com/pages/simple/" 
r = requests.get(url) 
print "We got a {} response code from {}".format(r.status_code, url)

我收到错误消息:

HTTPSConnectionPool(HOST='scraphethissite.com',port=443):超过URL为/pages/simple/的最大重试次数(由SSLError(SSLError(1,'ssl:WRONG_VERSION_NUMBER]错误版本号(_SSL.c:1123)'))

我知道我的请求不正确。是否与网站使用通讯协议HTTPS(vs HTTP)的事实相联系?我不确定,但这似乎是问题的一部分。

我正在Pycharm上使用Python3.8。我的SSL版本是:

OpenSSL 1.1.1g 2020年4月21日

我是网络爬行的初学者。这就是为什么我选择运行另一个代码来运行HTTP get-request,它允许我选择适当的端口和协议(source:https://pythonprogramming.net/python-sockets/):

import socket
import ssl    

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = True
context.load_default_certs()

server = 'scrapethissite.com'
port = 443
server_ip = socket.gethostbyname(server)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s = context.wrap_socket(s, server_hostname=server)

request = "GET / HTTP/1.1\nHost: "+server+"\n\n"

s.connect((server, port))
s.send(request.encode())
result = s.recv(4096)

while (len(result) > 0):
    print(result)
    result = s.recv(4096)

我得到了HTTP 200 OK状态响应,因此它工作良好。我在PyCharm终端中得到以下输出:

B'HTTP/1.1 200 OKrn日期:Tue,2021年1月12日14:59:35 GMTrn内容类型:text/html;charset=utf-8rntransfer-encoding:chunkedrnconnection:keep-alivernset-cookie:__cfduid=d205b0b8e8ce061174412767189bf10b41610463575;Expires=Thu,11-Feb-21 14:59:35 GMT;路径=/;domain=.scrapethissite.com;HTTPONLY;samesite=laxrncf-cache-status:dynamicrncf-request-id:0798b515a60000ea04f707d000000001rnexpect-ct:max-age=604800,report-uri=https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ctrnreport-to:endpoints:url:https://a.nel.couldflare.com/report?

null

唯一的问题是,我想刮这个网站:

https://scrapethissite.com/pages/simple/

而不是:

https://scrapethissite.com

当我替换

server = 'scrapethissite.com'

由:

server = 'scrapethissite.com/pages/simple/'

在前面的代码中,我得到了这个新的错误消息:

socket.gaierror: [Errno 11001] getaddrinfo failed

我的理解是,问题与代理有关。知道这个问题可能与端口,套接字,代理等有关,这是很有帮助的,但我不确定该如何修复这个代码,因为它在一个网站上运行良好,而在另一个网站上却没有。

任何帮助都非常感激。谢谢!

共有1个答案

公羊向荣
2023-03-14

如果要使用套接字方法,则应将 更改为 ,并将 仅保留为域名

我知道我的请求不正确。

443是正确的HTTPS端口。该错误说明SSL版本不正确

 类似资料:
  • 任何人都可以在下面帮助我吗? 是否可以通过POSTMAN运行SOAP Get Request? 如果是这样,请提供一些链接或步骤,因为我得到错误

  • 希望有人能告诉我这个脚本是否按我预期的方式运行,如果不能解释我做错了什么。 我使用的RESTful API的参数pageSize范围为10-50。我使用pageSize=50。还有一个我没有使用的参数叫pageNumber 因此,我认为这是发出get请求的正确方式: UPDATE 我想我理解得更好一点了。我更详细地阅读了留档,但我仍然不知道如何从API获取整个数据集。以下是更多信息: 我应该创建一

  • 我有一个具有OAuth2授权的Spring Cloud应用程序: 我添加了这个安全配置: github:https://github.com/rcbandit111/OAuth2/blob/master/src/main/java/org/engine/security/WebSecurityConfig.java 打开Angular应用程序时,出现访问错误: 您知道我需要应用什么配置才能在没有强

  • 直接在url跟参数 如接口URL为:http://localhost:8080/api 则完整地址为: http://localhost:8080/api?name=doc.result.5&version=&app_key=test&data=%257B%2522goods_name%2522%253A%2522iphoneX%2522%257D&timestamp=2018-06-22%200

  • 问题内容: 我正在尝试向不受控制的域上的API发出一个简单的JSON获取请求。 我的代码很简单: 但这是跨域请求,因此我在Chrome控制台中收到此错误: 当我尝试添加参数时,控制台将返回此错误: 未捕获到的SyntaxError:意外令牌: 但是,当我检查Chrome中的“网络”标签时,我看到“标题”下的状态代码为200 OK,实际上我可以在“响应”标签中看到完整的响应,但控制台仍显示“意外令牌

  • 使用Cookie访问经过身份验证的网页时,出现SSL错误。这似乎是一个mac特定的问题,许多人通过安装python证书来解决(正如我在下图的终端会话中尝试的那样),但是当我尝试安装时,会抛出一个异常()。 我应该如何修复此错误? 代码: 错误消息: 尝试的解决方案: 编辑5/19 附加终端会话(来自建议的解决方案): 编辑5/21 试图在项目中包含SSL,但引发错误。。这似乎是相关的,但是,当检查

  • 向传递的 URL 发出一个 GET 请求。 使用 XMLHttpRequest web API 向给定的 url 发出 get 请求。 通过调用给定的 callback 和 responseText 来处理 onload 事件。 通过运行提供的 err 函数,处理onerror事件。 省略第四个参数 err ,默认将错误记录到控制台的 error 流。 const httpGet = (url,

  • 我正在尝试通过Livy连接到一个kerberized hadoop集群以执行Spark代码。请求调用im制作如下所示。 此调用失败,出现以下错误 GSSException:未提供有效凭据(机制级别:找不到任何Kerberos凭据) 如果有任何帮助,我们将不胜感激。