【问题标题】:How to get a raw data from Pastebin with password?如何使用密码从 Pastebin 获取原始数据?
【发布时间】:2021-07-10 19:58:01
【问题描述】:

我想使用密码从某个锁定的 pastebin 链接与 python 获取原始数据。我不知道该怎么办。

使用 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)')))

谁能告诉我我可以使用哪一个?

【问题讨论】:

    标签: python python-requests pastebin


    【解决方案1】:

    注意:考虑使用Pastebin's APIPastebin's scraping API

    您的证书验证失败(proxy/tor/vpn/web 没有证书/错误配置的 web?)。如果您仍想继续,只需将verify=False as an argument 用于requests.post()

    requests.post(url="...", verify=False)
    

    如果您使用的是 VPN,也许您已经获得了您机器的根证书,您可以使用 cert=("path to cert", "path to key") 应用它。

    如果您使用的是 Tor,最好跳过该电路并重新创建一个新电路。

    对于代理来说,它很复杂,可能是证书问题,也可能只是配置错误/损坏。

    您可以通过检查您的网络会话(特定于操作系统)和环境变量requestsworks 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 的次要常见问题解答

    • 如果网站在其 ToS 中不允许抓取或禁止抓取,则不应这样做。虽然人们大多忽略它,但从非匿名设备/IP 上做这件事并不聪明,尤其是如果有一个从中赚钱的想法,因为那时人们开始寻找(甚至合法地)。
    • 不,Tor 将无法工作,尤其是因为一旦进入其中就充满了验证码。
    • 是的,任何至少有一点阅读服务器日志能力的人都可以弄清楚你将要做什么,并通过 IP、用户代理阻止你,或者只是通过提供随机数据来惹你生气(这样做,是稍后查看交通日志很有趣:D)
    • 是的,甚至 VPN 和代理也可以被阻止,就像使用 Tor 一样,只有它们会记录活动并让你付费
    • Pastebin 更改抓取流程的任何部分后,您就可以从头开始重新发明它

    【讨论】:

    • 谢谢。我尝试使用verify=False,它返回Bad Request (#400)Unable to verify your data submission. 也许我应该尝试另一种方法。
    • @vantabeam 这实际上很好,400 表示您可以连接到服务器,而服务器只是简单地说您的正文(或 url,或标题,或所有这些)不正确。也许尝试检查 API 文档中的 Content-Type 是否为 application/json(在这种情况下将 data= 更改为 json=)。
    • 其实我现在对API一窍不通。。所以我得先学API的东西。哈哈谢谢
    • @vantabeam 不是真的,看这个例子:requests.get("https://pastebin.com/raw/kmySM61Y").text - 工作正常,内容可以检索。事实上,如果您可以通过浏览器检索它,您可以使用 Python(或其他语言)检索它。只需检查普通请求的标头、cookie 和其他修饰符的流量。
    猜你喜欢
    • 2014-08-01
    • 2017-07-21
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    相关资源
    最近更新 更多