使用请求(不是 GET)在 Python 中通过 Post HTTP 请求下载 PDF

Download PDF via Post HTTP Request in Python using Request (not GET)

我的问题与许多其他问题略有不同。我正在做一个 POST,响应是下载 PDF(不是文本),您可以在下面看到堆栈跟踪。我找不到任何答案。

base_url = "https://homeland.my.salesforce.com"
action = base_url + "/sfc/p/#1I000003o0lm/a/8W000001Dmtq/GT9FLcwrLX3QQjVDLCEonLxmCi6nG4VqCUJzDyK80GU"

qdata = {"compositePageName",
        "1I000003o0lm/a/8W000001Dmtq/GT9FLcwrLX3QQjVDLCEonLxmCi6nG4VqCUJzDyK80GU" }


#req = requests.post(url=action, data=qdata)
req = requests.post(url=action, stream=True, data=qdata)

# blows up on above method with message

C:\Users\Quentin_Sarafinchan\PycharmProjects_getproperty\venv\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2021.2.3\plugins\python-ce\helpers\pydev\pydevd.py" --multiproc --qt-support=auto --客户端 127.0.0.1 --port 50548 --file C:/Users/Quentin_Sarafinchan/PycharmProjects/02_getproperty/main.py index.html --debug 连接到 pydev 调试器(内部版本 212.5457.59) 调试 - 打开 https://homeland.my.salesforce.com/sfc/p/1I000003o0lm/a/8W000001Dmtq/GT9FLcwrLX3QQjVDLCEonLxmCi6nG4VqCUJzDyK80GU" style="mso-style-priority:100 !important;text-decoration:none;-webkit-text-size-adjust:none;-ms-text-size-adjust:none ; mso-line-height-rule:完全一样;颜色:#FFFFFF;font-size:14px;border-style:纯色;border-color:#BB9A65;border-width:10px 15px;显示:inline-block;背景:#BB9A65;border-radius:0px; font-family:'open sans', 'helvetica neue', helvetica, arial, sans-serif;font-weight:粗体;font-style:正常;line-height: 17px;宽度:自动 text-align:center" target="_blank"> URL: https://homeland.my.salesforce.com/sfc/p/1I000003o0lm/a/8W000001Dmtq/GT9FLcwrLX3QQjVDLCEonLxmCi6nG4VqCUJzDyK80GU 追溯(最近一次通话): 文件“C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2544.0_x64__qbz5n2kfra8p0\lib\http\client.py”,第 1001 行,发送 self.sock.sendall(数据) 文件“C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2544.0_x64__qbz5n2kfra8p0\lib\ssl.py”,第 1201 行,在 sendall 以 memoryview(data) 作为视图,view.cast("B") 作为 byte_view: 类型错误:内存视图:需要 bytes-like object,而不是 'str'

在处理上述异常的过程中,又发生了一个异常:

回溯(最后一次调用): 请求中的文件“C:\Users\Quentin_Sarafinchan\PycharmProjects_getproperty\venv\lib\site-packages\requests\api.py”,第 61 行 return session.request(方法=方法, url=url, **kwargs) 请求中的文件“C:\Users\Quentin_Sarafinchan\PycharmProjects_getproperty\venv\lib\site-packages\requests\sessions.py”,第 542 行 resp = self.send(准备, **send_kwargs) 发送文件“C:\Users\Quentin_Sarafinchan\PycharmProjects_getproperty\venv\lib\site-packages\requests\sessions.py”,第 655 行 r = adapter.send(请求,**kwargs) 发送文件“C:\Users\Quentin_Sarafinchan\PycharmProjects_getproperty\venv\lib\site-packages\requests\adapters.py”,第 439 行 响应 = conn.urlopen( 文件“C:\Users\Quentin_Sarafinchan\PycharmProjects_getproperty\venv\lib\site-packages\urllib3\connectionpool.py”,第 699 行,在 urlopen 中 httplib_response = self._make_request( 文件“C:\Users\Quentin_Sarafinchan\PycharmProjects_getproperty\venv\lib\site-packages\urllib3\connectionpool.py”,第 394 行,在 _make_request 中 conn.request(方法, url, **httplib_request_kw) 请求中的文件“C:\Users\Quentin_Sarafinchan\PycharmProjects_getproperty\venv\lib\site-packages\urllib3\connection.py”,第 239 行 超级(HTTPConnection,自我)。请求(方法,url,body=body,headers=headers) 请求中的文件“C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2544.0_x64__qbz5n2kfra8p0\lib\http\client.py”,第 1285 行 self._send_request(方法, url, body, headers, encode_chunked) 文件“C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2544.0_x64__qbz5n2kfra8p0\lib\http\client.py”,第 1331 行,在 _send_request self.endheaders(body, encode_chunked=encode_chunked) 文件“C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2544.0_x64__qbz5n2kfra8p0\lib\http\client.py”,第 1280 行,最后 headers self._send_output(message_body, encode_chunked=encode_chunked) 文件“C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2544.0_x64__qbz5n2kfra8p0\lib\http\client.py”,第 1079 行,在 _send_output self.send(块) 文件“C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2544.0_x64__qbz5n2kfra8p0\lib\http\client.py”,第 1005 行,发送 self.sock.sendall(d) 文件“C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2544.0_x64__qbz5n2kfra8p0\lib\ssl.py”,第 1201 行,在 sendall 以 memoryview(data) 作为视图,view.cast("B") 作为 byte_view: 类型错误:内存视图:需要 bytes-like object,而不是 'str' python-BaseException

需要使用字节数组

#qdata = {"compositePageName",
#        "1I00EonLxmCi6nG4VqCUJzDyK80GU" }
nm = "compositePageName"
val = "LxmCi6nG4VqCUJzDyK80GU"
s = nm + "=" + val

qdata = bytearray(s, 'utf-8')
mv = memoryview(qdata)
req = requests.post(url=action, stream=True, data=mv)