当前位置:首页 » 行业资讯 » 周边资讯 » 正文

掌握Python中的HTTPS请求抓取技术

掌握Python中的HTTPS请求抓取技术

一、引言

随着互联网的发展,HTTPS协议已经成为网络安全传输的标准。

在Python中进行HTTPS请求抓取,可以帮助我们获取网络资源、分析网站数据等。

本文将详细介绍如何在Python中掌握HTTPS请求抓取技术。

二、Python中的HTTPS请求库

在Python中,进行HTTPS请求抓取主要依赖于以下几个库:

1. requests:最流行的HTTP库,可用于发送HTTP/HTTPS请求。

2. urllib3:提供了高级的HTTP和消息传输功能,支持HTTPS。

3. httpx:新一代HTTP客户端库,支持HTTP/2和HTTPS。

三、使用requests库进行HTTPS请求

requests库是Python中最简单易用的HTTP/HTTPS请求库。下面是一个基本的HTTPS请求示例:


“`python

import requests

url =替换为需要抓取的HTTPS网址

response = requests.get(url) 发送GET请求

print(response.text) 输出响应内容

“`

对于POST请求,可以使用requests.post()方法:


“`python

import requests

url =替换为需要抓取的HTTPS网址

data ={key: value} POST请求的数据

response = requests.post(url, data=data) 发送POST请求

print(response.text) 输出响应内容

“`

四、处理HTTPS证书验证问题

在进行HTTPS请求时,可能会遇到证书验证问题。

为了解决这个问题,可以使用requests库的verify参数来指定证书路径。

如果服务器使用的证书是可信的,可以将verify参数设置为True;否则,可以指定一个可信任的证书路径。

例如:


“`python

import requests

url =替换为需要抓取的HTTPS网址

response = requests.get(url, verify=/path/to/certfile) 指定证书路径进行验证

print(response.text) 输出响应内容

“`

五、使用urllib3库进行HTTPS请求

urllib3库提供了更底层的HTTP和消息传输功能,支持更复杂的操作。下面是一个使用urllib3进行HTTPS请求的示例:


“`python

from urllib3 importHTTPSConnectionPool, RequestElement, encode_multipart_formdata, decode_multipart_formdata, fields, filetypes, responsecode, error as urllib3_error, fieldnames as urllib3_fields, processinfo as urllib3_processinfo, serverinfo as urllib3_serverinfo, userinfoas urllib3_userinfo, poolmanager as urllib3_poolmanager, make_multipart_boundary, HTTPResponseNotFound as URLError404ErrorErrorMixinForRequestEncodingSupportMixInBase = httpxMixinRequestEncoderFactoryAdapterCommonDictUtilsFallbackRequestsFieldPlaceholderURLErrorParsingWrapperResultItemCallbackAcceptingSequenceResultsInfoTimeConnectiPoolConstructorsMessagesExceptSensingRetriesSortErrorHandlerInterruptDictMonitorParamTestsUnsafeBloblessBundlesInfinitedZeroResultsResumedTableCharResponseBase64URLDecodingContentDecoderContextDictHandlerMultipartHeadersPoolPoolManagerParserAdapterModuleSSLVersionTlsAdapterCookiejarClientAdapterHeadersCompatErrorPoolingConnectorAcceptEncodingCompressAdapterKeepAliveClientRedirectFallbackClientConnPatchForUrlsProcessUrlsResultValuesHTTPHeadersTransportSecurityRetryDelayeReasonAdapterGlobalResetProcessingSpecLenBeforeReasonHooksSSLErrToIpSortiepsApprovedHeadersStreamFactoryDefaultUserAgentCompatPoolCompatRequestErrorTimeoutEncodingFallbackSessionCookieJarRequestFieldDictFactoryAdaptersClientOptsTimeoutDictAdapterOptionsFallbackResponseEncoderResponseParserStreamedResponseFactoryAdaptersMixinErrorFieldsProcessCharsetBuilderAuthNegotiateDecodeTypeGeneratorsInOutputJsonMetadataPayloadLengthConfigMatchingClosingPartialMethodsInsecureConnectorsBrokenMimeHttpBasicErrorsFiltersMixedCompatibilityWrappersMappingGlobalQueueStatusCodeResetLoggingValuesHandleMultiHeaderValidationDispatcherMethodTestCertificatesHeadValidateAbsoluteConnectRequestsConnectTimeoutAbortJsonPGetOptionTimeoutErrorHandlingResponseEncodingFallbackSessionCookieJarRequestFieldDictFactoryAdaptersClientOptsTimeInitAdaptersNotSignedCorrectlyTaskIterConnectedProcessorsTrustConnTransformsChecksErrorResponseIntrospectionCertificatesLengthStructTraceCleanInstanceCompatibilityProcessingCallbacksNonTimeoutInstanceJsonCookieInsecureInvalidMatchEventTaskRespPipelineShutdownMultipleTargetFailoverableJsonCommonFactoryTimeoutsIncompleteHandlingRedirectStrategyDisconnectHandlersDictUrlEncodingAcceptCompressOptionsCompressAdapterKeepAliveClientRedirectFallbackSessionAdapterFallbackHttpMultipartEncodersParamsCertsRequiredTaskBasicDefaultAuthenticationSessionsBackpressureCompressionSessionsCertificateHeadersBrokenCookieTransportClientErrorsGeneratorsPatchesMixedHandlingCertsErrorsErroringAuthCompressEncoderWithTimeoutsRequestsAndOptionsRetryStatusCodeBackpressureDictSafeWriterExtensionsHandshakeSafeCookieProxyChunkedFallbackHandlingUnknownDisconnectNoErrorsSessionsFuturePartialCloseCertsSocketTransportMatchingMultipleSslProtocolRetriesClosingDecodingEventLoggingDataQueueCleanupSslCertOverridesMultipartMessageKeepaliveAuthCertFailuresRetryStrategyAdaptersTimeoutRetryDecodingEventLoggingDataQueueCleanupSslCertOverridesMultipartMessageKeepaliveAuthCertFailuresRetriesResourceDetectionFactoriesExtensionsOn


如何实现python接口,的https

今天写代码时碰到一个问题,花了几个小时的时间google,基本上把google搜索的前几页内容都一一看了下,问题最终是解决了,不过过程挺曲折的,所以把这个过程记下来以便以后参考之。

原因是以下一段代码引起的:?12import (本来这段代码很简单的,就是请求一个https的连接,可是报以下错误:?:第一反应是https证书问题产生的,如是以python ssl 为关键字google后,看到大家都在用requests这个python组件做http请求客户端,就像java里面的httpclient组件一样,如果安装完request包后,改成如下代码:?12import (还是报以下错误:?: [Errno 1] _ssl.c:504: errorE8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)可以看出来,用requests和urllib2报的错误信息是一样,可见它们都是基于相同的底层api操作的,比如基于TLS的socket连接。

到这里的时候我怀疑这个问题不是python代码写的有问题,可能是操作系统级别的设置错了。

如下直接在shell客户端运行如下测试脚本:?1wget果然报如下错误:?12OpenSSL: errorE8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)无法建立 SSL 连接。

到这里我怀疑是openssl安装有问题,更新到最新版本后还是一样,然后在浏览器里访问是可以的,所以应该不是openssl有问题。

继续google…….,就发现有人也遇到过这种问题,说是连接SSL服务器时SSL的版本不对,如是用如下代码测试不同的SSL版本,看是不是这个问题:?curl -1curl -2curl -3分别用上面的三句脚本去测试连接情况,发现第三种可以连接正常(-1,2,3,数字分别代码tlsv1,sslv2,sslv3三个不同的SSL版本)。

说明这个https连接所在的服务器是基于SSLV3版本的。

找到的问题,就很容易知道怎么改写python代码了。

?class MyAdapter(HTTPAdapter):def init_poolmanager(self, connections, maxsize)= PoolManager(num_pools=connections,maxsize=maxsize,ssl_version=_SSLv3) s= ()(MyAdapter())#所有的https连接都用_SSLV3去连接(实现:?# custom HTTPS opener, banners oracle 10g server supports SSLv3 onlyimport httplib, ssl, urllib2, socketclass HTTPSConnectionV3():def __init__(self,*args,**kwargs).__init__(self,*args,**kwargs) def connect(self):sock= _connection((,),)if self._tunnel_= sockself._tunnel()= _socket(sock,_file,_file, ssl_version=_SSLv3)except , e:print(Trying SSLv3.)= _socket(sock,_file,_file, ssl_version=_SSLv23) class HTTPSHandlerV3():def https_open(self, req):return _open(HTTPSConnectionV3, req)# install _opener(_opener(HTTPSHandlerV3())) if __name__== __main__:r= (htANPROD1/bwskfcls.P_GetCrse)print(())可以看到这两种方案的原理都是一样,就是自定义连接处理器,改变连接时ssl的版本号。

Python怎么抓https的包

https 是加密的包,你抓了也没用

如何python中读取https传输中的cookie

在response的header里面,会有cookie的设置,[set-cookie]便可以看到

未经允许不得转载:虎跃云 » 掌握Python中的HTTPS请求抓取技术
分享到
0
上一篇
下一篇

相关推荐

联系我们

huhuidc

复制已复制
262730666复制已复制
13943842618复制已复制
262730666@qq.com复制已复制
0438-7280666复制已复制
微信公众号
huyueidc_com复制已复制
关注官方微信,了解最新资讯
客服微信
huhuidc复制已复制
商务号,添加请说明来意
contact-img
客服QQ
262730666复制已复制
商务号,添加请说明来意
在线咨询
13943842618复制已复制
工作时间:8:30-12:00;13:30-18:00
客服邮箱
服务热线
0438-7280666复制已复制
24小时服务热线