问题描述
我想从某些锁定的带有 python 的 pastebin 链接中使用密码获取原始数据。我不知道该怎么办。
使用python的requests模块和post方法获取pastebin原始数据是不是不可能?我按照下面的代码尝试过,但它返回错误。
url = "https://pastebin.com/URL"
pass_data = {'PostPasswordVerificationForm[password]': 'password'}
res = requests.post(url,headers=headers,data = pass_data)
text = res.text
print(text)
它返回以下错误:
raise SSLError(e,request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='pastebin.com',port=443):
Max retries exceeded with url: /URL (Caused by SSLError(SSLCertVerificationError
(1,'[SSL: CERTIFICATE_VERIFY_Failed]certificate verify Failed:
self signed certificate in certificate chain (_ssl.c:1123)')))
谁能告诉我可以使用哪一种?
解决方法
注意:考虑使用 Pastebin's API 和 Pastebin's scraping API。
您的证书验证失败(proxy/tor/vpn/web without cert/misconfigured web?)。如果您仍想继续,只需对 requests.post()
使用 verify=False
as an argument:
requests.post(url="...",verify=False)
如果您使用的是 VPN,那么您的机器可能已经获得了根证书,您可以使用 cert=("path to cert","path to key")
应用它。
如果您使用 Tor,最好跳过该电路并重新创建一个新电路。
对于代理来说,这很复杂,可能是证书问题,也可能只是明显配置错误/损坏。
您可以通过检查您的网络会话(特定于操作系统)和环境变量 requests
包 works with 来验证没有使用代理:
http_proxy
HTTP_PROXY
https_proxy
HTTPS_PROXY
curl_ca_bundle
编辑:我刚刚重新检查了 Pastebin,RAW 文本选项仅适用于未受保护的粘贴。但是,您可以通过检查流量来获取 HTML 版本,然后只需通过保持会话、检查网络选项卡中的 cookie 和标头即可使用代码重新组装它。你应该得到这样的东西:
import requests as r
ses = r.Session()
cookie = ses.get("https://pastebin.com").cookies["_csrf-frontend"]
# The missing step here is reworking the provided CSRF by client-side
# JS which is "hidden" in the minified jquery.min.js (or at least the
# `POST` is issued by it). Once you have it,you can put it to the
# data field
print(ses.post(
url='https://pastebin.com/<your paste>',headers={
'User-Agent': "<user agent to spoof it's via Requests>",'Accept': (
'text/html'
',application/xhtml+xml'
',application/xml'
';q=0.9,image/webp,*/*;q=0.8'
),'Accept-Language': 'en-US,en;q=0.5','Content-Type': 'application/x-www-form-urlencoded'
},data=(
'_csrf-frontend=<JS-manipulated CSRF value>'
'&is_burn=1'
'&PostPasswordVerificationForm%5Bpassword%5D=<pass>'
)
).text)
之后只需检查包含 RAW
的标签,然后通过一些快速正则表达式 (obligatory "it's a stupid idea" post) 或使用不易出错的解决方案(例如 BeautifulSoup)解析它。
尽管如此,验证码、IP 黑名单、“聪明的”CSRF 处理和类似的东西最终会阻止你进行这样的抓取,如果不是,那么组装一个可以在 Angular 中动态更改其类名、标签名等的应用程序太容易了只是为了弄乱你对 lulz 的抓取(Google Docs 喜欢这些东西,个人经验),所以如果你打算用它做一些严肃的事情,只需使用 API。
Edit2:抓取的次要常见问题解答/为什么使用 API
- 如果该网站在其服务条款中不允许抓取或禁止,则您不应该这样做。尽管人们大多会忽略它,但从非匿名设备/IP 进行操作并不明智,特别是如果有从中赚钱的想法,因为人们开始寻找(甚至合法)。
- 不,Tor 将无法工作,特别是因为一旦进入它就会充满验证码。
- 是的,任何至少有一点读取服务器日志能力的人都可以弄清楚您将要做什么并通过 IP、用户代理阻止您,或者只是通过提供随机数据来惹恼您(这样做,很稍后查看交通日志很有趣:D)
- 是的,即使是 VPN 和代理也可以被阻止,就像使用 Tor 一样,只有它们会记录活动并让您付费
- 一旦 Pastebin 更改了抓取流程的任何部分,您就可以从头开始重新发明它