繁体   English   中英

Postman API 请求在 Python

[英]Postman API request in Python

我正在尝试从https://www.mcmaster.com中抓取数据。 他们为我提供了一个 .pfx 文件和一个密码。 当使用他们的.json 文件对 Postman 发出 GET 请求时,我输入了我的网站登录名/密码并上传了带有密码的 .pfx 证书,一切正常。 现在我正在尝试做同样的事情,但在 Python 中,但有点不确定。

这是我当前的 Python 代码,我不确定将网站电子邮件/密码登录放在哪里以及如何成功执行 GET 请求。

import requests_pkcs12
from requests_pkcs12 import get

r = get('https://api.mcmaster.com/v1/login', pkcs12_filename='Schallert.pfx', pkcs12_password='mcmasterAPI@1901')

response = requests_pkcs12.get(r)

print(response.text)

这是我在 Postman 中设置的方法(网站电子邮件/密码登录) 在此处输入图像描述

.PFX 证书页面在此处输入图像描述

Postman 有一个内置功能,可以将请求转换为代码。 你可以这样做:

  1. 在最右侧单击代码片段按钮 (</>)
  2. 进入该页面后,有两个可用的 python 选项
  3. 然后您需要做的就是将代码复制到 Python 文件中并添加所有自定义项(应该已经优化)

我要警告你的一件事是 URL。 Postman doesn't add http:// or https:// to the URL, which means Python will throw a No Scheme Supplied error.

自动转换的可用软件包:

  1. 要求
  2. http.client

这意味着您将不得不使用不同的 package 而不是requests_pkcs12

在快速搜索 web 之后,您似乎需要创建一个临时证书作为.pem文件,然后将其传递给请求。

from contextlib import contextmanager
from pathlib import Path
from tempfile import NamedTemporaryFile

import requests
from cryptography.hazmat.primitives.serialization import Encoding, PrivateFormat, NoEncryption
from cryptography.hazmat.primitives.serialization.pkcs12 import load_key_and_certificates


@contextmanager
def pfx_to_pem(pfx_path, pfx_password):
    pfx = Path(pfx_path).read_bytes()
    private_key, main_cert, add_certs = load_key_and_certificates(pfx, pfx_password.encode('utf-8'), None)

    with NamedTemporaryFile(suffix='.pem') as t_pem:
        with open(t_pem.name, 'wb') as pem_file:
            pem_file.write(private_key.private_bytes(Encoding.PEM, PrivateFormat.PKCS8, NoEncryption()))
            pem_file.write(main_cert.public_bytes(Encoding.PEM))
            for ca in add_certs:
                pem_file.write(ca.public_bytes(Encoding.PEM))
        yield t_pem.name

with pfx_to_pem('your pfx file path', 'your passphrase') as cert:
    requests.get(url, cert=cert, data=payload)

package requests_pkcs12是写在requests package 之上的包装器。 因此,所有接受requests的参数都将被requests_pkcs12接受。

这是源代码证明。 https://github.com/m-click/requests_pkcs12/blob/master/requests_pkcs12.py#L156

另外,从您的屏幕截图中,我了解到您使用的是POST而不是GET

import json
from requests_pkcs12 import post

url = "https://api.mcmaster.com/v1/login"
payload = {'Username': 'yourusername',
           'Password': 'yourpassword'}

resp = post(url, pkcs12_filename='Schallert.pfx', pkcs12_password='mcmasterAPI@1901', data=json.dumps(payload))
print(resp)

脚注:我希望密码mcmasterAPI@1901是假的。 如果不是,请不要在平台上分享任何凭据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM