如何在Python 3中保留xmlrpc.client的cookie?

2024-03-04

默认Pythonxmlrpc.client.Transport(可与xmlrpc.client.ServerProxy) 不保留 cookie,而基于 cookie 的登录有时需要 cookie。

例如,以下代理与 TapaTalk API 一起使用时(对于该代理login method https://tapatalk.com/api/api_section.php?id=2#login使用 cookies 进行身份验证),在尝试修改帖子时会给出权限错误。

proxy = xmlrpc.client.ServerProxy(URL, xmlrpc.client.Transport())

一些解决方案 http://www.lunch.org.uk/wiki/xmlrpccookies适用于网络上的 Python 2,但它们与 Python 3 不兼容。

我怎样才能使用Transport保留cookies?


GermainZ 的现有答案仅适用于 HTTP。经过一番斗争,终于有了HTTPS适配。请注意context选项至关重要。

class CookiesTransport(xmlrpc.client.SafeTransport):
    """A SafeTransport (HTTPS) subclass that retains cookies over its lifetime."""

    # Note context option - it's required for success
    def __init__(self, context=None):
        super().__init__(context=context)
        self._cookies = []

    def send_headers(self, connection, headers):
        if self._cookies:
            connection.putheader("Cookie", "; ".join(self._cookies))
        super().send_headers(connection, headers)

    def parse_response(self, response):
        # This check is required if in some responses we receive no cookies at all
        if response.msg.get_all("Set-Cookie"):
            for header in response.msg.get_all("Set-Cookie"):
                cookie = header.split(";", 1)[0]
                self._cookies.append(cookie)
        return super().parse_response(response)

其原因是 ServerProxy 不尊重context与传输相关的选项,如果指定了传输,那么我们需要直接在传输构造函数中使用它。

Usage:

import xmlrpc.client
import ssl


transport = CookiesTransport(context=ssl._create_unverified_context())
# Note the closing slash in address as well, very important
server = xmlrpc.client.ServerProxy("https://<api_link>/", transport=transport)

# do stuff with server
server.myApiFunc({'param1': 'x', 'param2': 'y'})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python 3中保留xmlrpc.client的cookie? 的相关文章

  • 在 Pandas 中,如何从基于另一个数据框的数据框中删除行?

    我有 2 个数据框 一个名为 USERS 另一个名为 EXCLUDE 他们都有一个名为 电子邮件 的字段 基本上 我想删除 USERS 中包含 EXCLUDE 中包含电子邮件的每一行 我该怎么做 您可以使用boolean indexing
  • ctypes 错误:libdc1394 错误:无法初始化 libdc1394

    我正在尝试将程序编译为共享库 我可以使用 ctypes 在 Python 代码中使用该库 使用以下命令该库可以正常编译 g shared Wl soname mylib O3 o mylib so fPIC files pkg config
  • 在 python 3 中使用子进程

    我使用 subprocess 模块在 python 3 中运行 shell 命令 这是我的代码 import subprocess filename somename py in practical i m using a real fil
  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • 如何在VIM中设置文件的正确路径?

    每当我击中 pwd在 vim 中命令总是返回路径C Windows system32 即使我在桌面上的 Python 文件中 所以每当我跑步时 python 命令返回 python can t open file Users myname
  • 如何在Python中高效地添加稀疏矩阵

    我想知道如何在Python中有效地添加稀疏矩阵 我有一个程序 可以将大任务分解为子任务 并将它们分配到多个 CPU 上 每个子任务都会产生一个结果 一个 scipy 稀疏矩阵 格式为 lil matrix 稀疏矩阵尺寸为 100000x50
  • 根据 Pandas 中的列表对多列进行排序

    感谢有关如何根据 pandas 中的倍数列表对给定多列进行排序的任何提示 如下所示 import pandas as pd sort a a d e sort b s1 s3 s6 sort c t1 t2 t3 df pd DataFra
  • 芹菜中未处理的异常冻结了工人

    我通过 redis 后端在 docker 中运行 celery 我有 芹菜搅拌容器 芹菜工人容器 Redis容器 celery 工作容器生成 6 个工作进程 如果 celery 任务遇到异常 工作人员 所有工作人员 将停止使用作业 我尝试稍
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • CNTK 抱怨 LSTM 中的动态轴

    我正在尝试在 CNTK 中实现 LSTM 使用 Python 来对序列进行分类 Input 特征是固定长度的数字序列 时间序列 标签是 one hot 值的向量 Network input input variable input dim
  • 在相同任务上,Keras 比 TensorFlow 慢

    我正在使用 Python 运行斩首 DCNN 本例中为 Inception V3 来获取图像特征 我使用的是 Anaconda Py3 6 和 Windows7 使用 TensorFlow 时 我将会话保存在变量中 感谢 jdehesa 并
  • 设置 verify_certs=False 但 elasticsearch.Elasticsearch 因证书验证失败而引发 SSL 错误

    self host KibanaProxy 自我端口 443 self user 测试 self password 测试 我需要禁止证书验证 使用选项时它与curl一起使用 k在命令行上 但是 在使用 Elasticsearch pytho
  • 揭秘sharedctypes性能

    在 python 中 可以在多个进程之间共享 ctypes 对象 然而我注意到分配这些对象似乎非常昂贵 考虑以下代码 from multiprocessing import sharedctypes as sct import ctypes
  • Python Django-如何从输入文件标签读取文件?

    我不想将文件保存在我的服务器上 我只想在下一页中读取并打印该文件 现在我有这个 index html
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • Pandas 堆积条形图中元素的排序

    我正在尝试绘制有关某个地区 5 个地区的家庭在特定行业赚取的收入比例的信息 我使用 groupby 按地区对数据框中的信息进行排序 df df orig groupby District Portion of income value co
  • `pyqt5'错误`元数据生成失败`

    我正在尝试安装pyqt5使用带有 M1 芯片和 Python 3 9 12 的 mac 操作系统 我怀疑M1芯片可能是原因 我收到一个错误metadata generation failed 最小工作示例 directly in the t
  • 使用 pybtex 将 bibtex 转换为格式化的 HTML 参考书目,例如哈佛风格

    我正在使用 Django 并将 bibtex 存储在我的模型中 并且希望能够以格式化 HTML 字符串的形式向我的视图传递引用 使其看起来像哈佛引用样式 使用中描述的方法Pybtex 无法识别 bibtex 条目 https stackov
  • 附加两个具有相同列、不同顺序的数据框

    我有两个熊猫数据框 noclickDF DataFrame 0 123 321 0 1543 432 columns click id location clickDF DataFrame 1 123 421 1 1543 436 colu
  • 计算互相关函数?

    In R 我在用ccf or acf计算成对互相关函数 以便我可以找出哪个移位给我带来最大值 从它的外观来看 R给我一个标准化的值序列 Python 的 scipy 中是否有类似的东西 或者我应该使用fft模块 目前 我正在这样做 xcor

随机推荐

  • gnuplot - 将字符串变量转换为小写

    如何在 gnuplot 中将字符串转换为小写 这是一个 gnuplot 字符串处理问题 示例 我希望在 gnuplot 脚本中检查用户输入的参数 if tolower ARG2 ohms 因此接受 ohms Ohms 或 OHMS 首选是不
  • 整数除以 3 最快的方法是什么?

    int x n 3 lt make this faster for instance int a n 3 lt normal integer multiplication int b n lt lt 1 n lt potentially f
  • 使用 Python 删除所有 DynamoDB 项目

    如何使用 python boto3 删除 DynamoDB 中的所有项目 我正在尝试这样做 scan table scan with table batch writer as batch for each in scan Items ba
  • J2ME开发不用Java?

    我正在第一次涉足 J2ME 世界 我更喜欢使用函数式语言来进行开发 Scala 曾经支持 CLDC 但已不再维护 Bigloo似乎消失了 解释器 例如 Jython 是不行的 因为 J2ME 应用程序必须很小 至少我的应用程序必须很小 我想
  • GCov可以在windows下使用吗?

    我可以在 Windows 中安装 gcov 工具吗 或者我可以在windows下的eclipse中使用这个工具的插件吗 我对这个工具很陌生 我对这个工具没有任何想法 请帮我获取这个工具的信息 请告诉我在我的机器上运行此工具的要求 我在哪里可
  • YouTube IFRAME 与 YouTube Android 播放器 API

    我计划在我的 Android 应用程序中安装 YouTube 播放器 并找到了两种替代方案 框架API https developers google com youtube iframe api reference或与YouTube An
  • 如何将 Heroku 应用程序链接到私人 Github 存储库?

    我是 Heroku 的新手 我不熟悉部署 管道的用语 我已经安装了 Heroku CLI 并使用以下命令部署了一个应用程序 run heroku create myNewHerokuApp 我的实例现已制作完毕 我在 Github 上有一个
  • 页面部分回发后如何在 UpdatePanel 中保持焦点位置

    我在带有更新面板的页面中有四个控件 最初 鼠标焦点设置为第一个控件 当我将页面部分回发到服务器时 焦点会自动从我按下 Tab 键的控件的最后一个焦点控件移动到第一个控件 有什么办法可以保持最后的焦点吗 看一眼使用自动回发控件在更新面板中恢复
  • 在 Webpack + VueJs 中链接样式表和要求它们有什么区别?

    使用 VueJs 和 Webpack 组合 我发现要包含外部样式表 例如 bootstrap 您可以执行以下两种操作之一 在你的主 js 脚本中 你可能需要这样的样式表 require assets lib bootstrap min cs
  • textContent 与 insideText 之间的区别

    有什么区别textContent and innerText在 JavaScript 中 我可以用吗textContent如下 var logo document getElementsByClassName logo 0 logo tex
  • 如何解决模块中声明了包,但模块不读取它?

    我正在将我的开发环境迁移到另一台电脑 我使用NetBeans 10 打开JDK11 JavaFX 当我将主项目导入 NetBeans 时 出现以下错误 on import java util logging Level import jav
  • 是否有可能构建一个相对快速的无类型 lambda 演算机?

    纯无类型 lambda 演算是一个强大的概念 然而 构建一台供现实世界使用的机器或解释器通常被描述为 接近 不可能 我想对此进行调查 理论上是否可以构建一个相对较快的无类型 lambda 演算机 我所说的相对较快通常是指在相似数量的资源 门
  • IBM Worklight 6.2 - StoragePlugin 上出现错误

    我从 Worklight 6 1 0 1 升级到 6 2 从那时起 我的应用程序停止成功加载 JSONStore 它说找不到类 StoragePlugin 尽管该类实际上存在于 worklight android jar 中 它还在 con
  • Java 中的公共接口和发布接口有什么区别? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我读过这两页 http martinfowler com ieeeSoftware published pdf http martinfo
  • 调试模式或发布模式

    最近 我正在致力于将物理引擎集成到我的图形引擎程序中 在此之前 我总是在调试模式下构建我的程序 因为我觉得调试意味着安全 并且可以提供更多信息让我知道哪里出了问题 在我的程序中 我在Release模式下构建了Assimp 但直到现在我仍然在
  • AngularJS 控制器继承

    AngularJS 具有基于 DOM 的控制器继承 如 Angular 文档中所述 div p Base Controller Value value p div
  • `2>/dev/null` 在 Makefile 中不起作用

    我试图抑制错误rm通过书写命令 生成文件 clean wildcard mod rm 2 gt dev null I ran make clean rm 2 gt dev null make clean Error 64 ignored 我
  • 为什么 strlcpy 和 strlcat 被认为不安全?

    我明白那个strlcpy and strlcat被设计为安全替代品strncpy and strncat 但仍有一些人认为他们不安全 并且只会导致不同类型的问题 https en wikipedia org wiki C string ha
  • 如何在 Rails 中设置哈希表单?

    我有一些与散列中的模型关联的数据 哈希值在控制器中生成 hash 为这些数据创建表单的正确方法是什么 我为视图想出了以下代码 div class field br div 这会生成表单 但它将每个哈希项创建为表单中的单独变量 这似乎不是提交
  • 如何在Python 3中保留xmlrpc.client的cookie?

    默认Pythonxmlrpc client Transport 可与xmlrpc client ServerProxy 不保留 cookie 而基于 cookie 的登录有时需要 cookie 例如 以下代理与 TapaTalk API 一