使用 python urllib2 在http标头中传递会话cookie?

2023-11-25

我正在尝试编写一个简单的脚本来登录维基百科并使用 Mediawiki api 在我的用户页面上执行一些操作。但是,我似乎从未通过第一个登录请求(从此页面:https://en.wikipedia.org/wiki/Wikipedia:Creating_a_bot#Logging_in)。我认为我设置的会话 cookie 没有被发送。到目前为止,这是我的代码:

import Cookie, urllib, urllib2, xml.etree.ElementTree

url = 'https://en.wikipedia.org/w/api.php?action=login&format=xml'
username = 'user'
password = 'password'

user_data = [('lgname', username), ('lgpassword', password)]

#Login step 1
#Make the POST request
request = urllib2.Request(url)
data = urllib.urlencode(user_data)
login_raw_data1 = urllib2.urlopen(request, data).read()

#Parse the XML for the login information
login_data1 = xml.etree.ElementTree.fromstring(login_raw_data1)
login_tag = login_data1.find('login')
token = login_tag.attrib['token']
cookieprefix = login_tag.attrib['cookieprefix']
sessionid = login_tag.attrib['sessionid']

#Set the cookies
cookie = Cookie.SimpleCookie()
cookie[cookieprefix + '_session'] = sessionid

#Login step 2
request = urllib2.Request(url)
session_cookie_header = cookieprefix+'_session='+sessionid+'; path=/; domain=.wikipedia.org; HttpOnly'

request.add_header('Set-Cookie', session_cookie_header)
user_data.append(('lgtoken', token))
data = urllib.urlencode(user_data)

login_raw_data2 = urllib2.urlopen(request, data).read()

我认为问题出在某个地方request.add_header('Set-Cookie', session_cookie_header)线,但我不确定。如何使用这些 python 库在每个请求的标头中发送 cookie(这对于许多 API 函数来说是必需的)。


最新版本requests支持sessions(而且使用起来非常简单而且总体来说很棒):

with requests.session() as s: 
    s.post(url, data=user_data)
    r = s.get(url_2)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 python urllib2 在http标头中传递会话cookie? 的相关文章

  • xlrd.biffh.XLRDError:Excel xlsx 文件;不支持[重复]

    这个问题在这里已经有答案了 我正在尝试使用读取启用宏的 Excel 工作表pandas read excel与 xlrd 库 它在本地运行良好 但是当我尝试将其推送到 PCF 时 我收到此错误 2020 12 11T21 09 53 441
  • 如何使用 pyinstaller 包含文件?

    我也使用 tkinter 使用 python 3 7 编写了一个程序 由于我使用的是外部图片 因此当我将所有内容编译为一个 exe 时 我需要包含它们 我试过做 add data bg png files 但我仍然收到此错误 tkinter
  • boto3 资源(例如 DynamoDB.Table)的类型注释

    The boto3库提供了几种返回资源的工厂方法 例如 dynamo boto3 resource dynamodb Table os environ DYNAMODB TABLE 我想注释这些资源 以便我可以获得更好的类型检查和完成 但我
  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • Java Junit 测试 HTTP POST 请求

    我需要测试以下方法而不改变方法本身 该方法向服务器发出 POST 方法 但我需要制作一个独立于服务器的测试用例 在将其重定向到本地文件之前 我测试了类似的方法 但为此我将协议指定为文件 主机名指定为 localhost 端口指定为 1 我的
  • 根据开始列和结束列扩展数据框(速度)

    我有一个pandas DataFrame含有start and end列 加上几个附加列 我想将此数据框扩展为一个时间序列 从start值并结束于end值 但复制我的其他专栏 到目前为止 我想出了以下内容 import pandas as
  • 如何将 self 传递给装饰器?

    我该如何通过self key下面进入装饰器 class CacheMix object def init self args kwargs super CacheMix self init args kwargs key func Cons
  • 使用 scipy curve_fit 拟合噪声指数的建议?

    我正在尝试拟合通常按以下方式建模的数据 def fit eq x a b c d e return a 1 np exp x b c np exp x d e x np arange 0 100 0 001 y fit eq x 1 1 1
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • `list()` 被认为是一个函数吗?

    list显然是内置类型 https docs python org 3 library stdtypes html list在Python中 我看到底下有一条评论this https stackoverflow com a 53645813
  • 与 while 循环一样,如何跳过 for 循环中的步骤?

    我尝试像 while 循环一样跳过 for 循环中的几个步骤 在 while 循环中 步骤根据特定条件进行调整 如下面的代码所示 i 0 while i lt 10 if i 3 i 5 else print i i i 1 result
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • 如何使用 sys.path.append 在 Python 中导入文件?

    我的桌面上有两个目录 DIR1 and DIR2其中包含以下文件 DIR1 file1 py DIR2 file2 py myfile txt 这些文件包含以下内容 file1 py import sys sys path append s
  • PyTorch DataLoader 对并行运行的批次使用相同的随机种子

    有一个bug https tanelp github io posts a bug that plagues thousands of open source ml projects 在 PyTorch Numpy 中 当并行加载批次时Da
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 在 virtualenvwrapper 中激活环境

    我安装了virtualenv and virtualenvwrapper用这个命令我创建了一个环境 mkvirtualenv cv 它有效 创建后我就处于新环境中 现在我重新启动了我的电脑 我想activate又是那个环境 但是怎么样 我使
  • Django 模型:如何使用 mixin 类来覆盖 django 模型以实现 save 等功能

    我想在每次保存模型之前验证值 所以 我必须重写保存函数 代码几乎是一样的 我想把它写在 mixin 类中 但失败了 我不知道如何写 super func 我英语不好 抱歉 class SyncableMixin object def sav
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X
  • 使用 urllib 编码时保持 url 参数有序

    我正在尝试用 python 模拟 get 请求 我有一个参数字典 并使用 urllib urlencode 对它们进行 urlencode 我注意到虽然字典的形式是 k1 v1 k2 v2 k3 v3 urlencoding 后参数的顺序切

随机推荐

  • PHP 重命名数组的键

    如何重命名数组中的键 从这个名为 start array 的数组开始 0 gt date gt 2012 05 01 revenue gt 100 1 gt date gt 2012 05 02 revenue gt 200 并更改 日期
  • 为什么 Java 8 中的 Cloneable 没有默认的 clone()

    CloneableJava 本质上是破碎的 具体来说 我对接口的最大问题是它需要一种不定义方法本身的方法行为 所以如果遍历一个Cloneable列表中您必须使用反射来访问其定义的行为 然而 在 Java 8 中 我们现在有了默认方法 现在我
  • 使用 docker-entrypoint-initdb.d 脚本初始化 PostgreSQL 容器

    我正在尝试创建一个 PostgreSQL 11 5 docker 容器 在此过程中 我想运行一个 SQL 脚本来创建必要的用户 表等 但是 每当容器启动时 我都会看到以下错误 The files belonging to this data
  • Web api 路由和 http post [重复]

    这个问题在这里已经有答案了 我正在使用 WEB API 2 构建一个 API 我有以下 API 控制器 RoutePrefix api account public class AccountController ApiController
  • 如何在 AddModelError 消息中包含链接?

    我想添加一个 ModelState 错误 如下所示 ModelState AddModelError Some message a href controller action click here a 但是 该链接不会进行编码 因此会像文
  • emacs 完成或 IntelliSense 与 Visual Studio 上相同

    Linux 上的 emacs 22 2 1 我正在使用 emacs 进行一些 C C 编程 我想知道 emacs 是否支持补全 Visual Studio 中的 IntelliSense 例如 在填充结构时 我希望在键入点运算符或箭头运算符
  • 如何在netbeans中运行node.js文件?

    在net beans中 我安装了node js插件 但是我的简单节点程序无法工作 我收到错误 这是我的示例代码 var http require http http createServer function req res res wri
  • C/C++中Lua函数的引用

    我有一个函数嵌套在一组表中相对较深 C C 中有没有一种方法可以获取对该函数的 引用 并在需要使用它时将其 和参数 推送到堆栈上 这就是参考系统是为了 函数调用r luaL ref L LUA REGISTRYINDEX 将值存储在注册表中
  • $q.all 和嵌套的 Promise

    有一个关于在 Angular 中使用 q 时同步嵌套 Promise 的问题 下面的代码能否确保等待整个 Promise 链 这意味着对返回承诺的服务的嵌套调用是否会在 q all 块中等待 var call1 service1 get s
  • 使用 QTextStream 以非阻塞方式读取 stdin

    使用 Qt 我尝试以非阻塞方式读取标准输入流的内容 当套接字收到一些新数据时 我使用 QSocketNotifier 来提醒我 通知程序的设置如下所示 QSocketNotifier pNot new QSocketNotifier STD
  • 如何在 Scala 中使用库的多个版本?

    我正在 Scala 中使用一个库 例如 A 它依赖于另一个库 例如 Z 的 x 11 版本 现在 我还使用一个库 B 它依赖于 Z 的 x 31 版本 这会导致编译错误 因为我们将有两个版本的库 Z 我如何在 scala 的 sbt 中同时
  • 捕获标准输出并仍然将其显示在控制台窗口中

    我正在生成一个在可见控制台窗口中运行的子进程 它是运行 MSBuild 的批处理文件 并且我希望将进程生成的输出显示在可见控制台窗口中 并捕获该输出所以我可以用代码处理它 我已经阅读了其他几个问题和处理 ProcessStartInfo R
  • 在这种情况下,为什么调用父类方法而不是子类方法?

    我有一个父类 A 和它的子类 B 两者都有doSomething具有不同类型参数的方法 Class A package Inheritance public class A public void doSomething Object st
  • 添加类后 jQuery 单击事件不起作用

    在我的 JSP 页面中我添加了一些链接 a class applicationdata href Organization Data a a class applicationdata href Business Units a a cla
  • 为什么“cat”不会附加到“file”连接?

    我运行了这两个代码块 期望得到相同的输出 cattest lt file cattest txt cat First thing file cattest cat Second thing file cattest append TRUE
  • Laravel 如果 id 相同则验证唯一

    我有一个表 模型 其中每个用户包含多个相册 有没有办法说这个专栏title应该是唯一的 但仅限于具有相同的行user id 例子 http pastebin com 8dvM4a1T 正如您在示例中看到的 id 为 2 的用户创建了 2 个
  • 使用 ssh 密钥进行 cron git 推送

    我为github帐户设置了ssh密钥 因此不必每次都输入密码 效果很好 这是我使用的脚本 bin bash git push origin master 但是当我使用 cron 运行它时 它不会使用我的 ssh 密钥 这是输出 Permis
  • 状态栏和导航栏上的 Google Now 渐变/阴影

    我正在尝试制作与 Google Now 类似的状态栏和导航栏渐变 图片参考 如下所示的矩形区域 在 Android Marshmallow 上尝试以下选项后
  • 删除 Javascript blob?

    我很难摆脱这些愚蠢的事情 我有几个处理大量媒体文件的 Chrome 应用程序 其中一个我能够使用一堆 删除 和一个window URL revokeObjectURL这最终阻止了他们在chrome blob internals 但这另一个似
  • 使用 python urllib2 在http标头中传递会话cookie?

    我正在尝试编写一个简单的脚本来登录维基百科并使用 Mediawiki api 在我的用户页面上执行一些操作 但是 我似乎从未通过第一个登录请求 从此页面 https en wikipedia org wiki Wikipedia Creat