python中的MediaWiki验证来自cookies

python中的MediaWiki验证来自cookies,python,authentication,cookies,openid,mediawiki,Python,Authentication,Cookies,Openid,Mediawiki,在同一域上的一些Python CGI脚本中使用MediaWiki Cookie进行身份验证(尤其是MW的OpenID),最简单的方法是什么 也可以从python访问MediaWiki数据库。您可以使用该模块在不使用HTTP和cookie的情况下连接和修改SQL数据库,但这通常是执行MediaWiki维护的错误解决方案。尽管只读访问不应该是一个问题 使用脚本访问MediaWiki的最佳方法是使用 最著名的基于Python的MediaWiki API bot就是前者 在Python中保存cookie

在同一域上的一些Python CGI脚本中使用MediaWiki Cookie进行身份验证(尤其是MW的OpenID),最简单的方法是什么


也可以从python访问MediaWiki数据库。

您可以使用该模块在不使用HTTP和cookie的情况下连接和修改SQL数据库,但这通常是执行MediaWiki维护的错误解决方案。尽管只读访问不应该是一个问题

使用脚本访问MediaWiki的最佳方法是使用

最著名的基于Python的MediaWiki API bot就是前者

在Python中保存cookie的最简单方法可能是使用模块。 其文档包含一些简单的示例

我从自己的MediaWiki机器人中提取了功能示例代码:

#!/usr/bin/python3

import http.cookiejar
import urllib.request
import urllib.parse
import json

s_login_name = 'example'
s_login_password = 'secret'

s_api_url = 'http://en.wikipedia.org/w/api.php'
s_user_agent = 'StackOverflowExample/0.0.1.2012.09.26.1'

def api_request(d_post_params):
    d_post_params['format'] = 'json'
    r_post_params = urllib.parse.urlencode(d_post_params).encode('utf-8')
    o_url_request = urllib.request.Request(s_api_url, r_post_params)
    o_url_request.add_header('User-Agent', s_user_agent)
    o_http_response = o_url_opener.open(o_url_request)
    s_reply = o_http_response.read().decode('utf-8')
    d_reply = json.loads(s_reply)
    return (o_http_response.code, d_reply)

o_cookie_jar = http.cookiejar.CookieJar()
o_http_cookie_processor = urllib.request.HTTPCookieProcessor(o_cookie_jar)
o_url_opener = urllib.request.build_opener(o_http_cookie_processor)

d_post_params = {'action': 'login', 'lgname': s_login_name}
i_code, d_reply = api_request(d_post_params)
print('http code: %d' % (i_code))
print('api reply: %s' % (d_reply))

s_login_token = d_reply['login']['token']

d_post_params = {
    'action': 'login',
    'lgname': s_login_name,
    'lgpassword': s_login_password,
    'lgtoken':s_login_token
}
i_code, d_reply = api_request(d_post_params)
print('http code: %d' % (i_code))
print('api reply: %s' % (d_reply))
类、错误处理和子函数已被删除,以提高可读性

保存在o_url_opener中的cookies也可用于请求

您也可以通过index.php登录浏览器请求,但这将包括对HTML输出的解析

变量名称图例:

# Unicode string
s_* = 'a'
# Bytes (raw string)
r_* = b'a'
# Dictionary
d_* = {'a':1}
# Integer number
i_* = 4711
# Other objects
o_* = SomeClass()

您可以使用该模块在不使用HTTP和Cookie的情况下连接和修改SQL数据库,但这通常是进行MediaWiki维护的错误解决方案。尽管只读访问不应该是一个问题

使用脚本访问MediaWiki的最佳方法是使用

最著名的基于Python的MediaWiki API bot就是前者

在Python中保存cookie的最简单方法可能是使用模块。 其文档包含一些简单的示例

我从自己的MediaWiki机器人中提取了功能示例代码:

#!/usr/bin/python3

import http.cookiejar
import urllib.request
import urllib.parse
import json

s_login_name = 'example'
s_login_password = 'secret'

s_api_url = 'http://en.wikipedia.org/w/api.php'
s_user_agent = 'StackOverflowExample/0.0.1.2012.09.26.1'

def api_request(d_post_params):
    d_post_params['format'] = 'json'
    r_post_params = urllib.parse.urlencode(d_post_params).encode('utf-8')
    o_url_request = urllib.request.Request(s_api_url, r_post_params)
    o_url_request.add_header('User-Agent', s_user_agent)
    o_http_response = o_url_opener.open(o_url_request)
    s_reply = o_http_response.read().decode('utf-8')
    d_reply = json.loads(s_reply)
    return (o_http_response.code, d_reply)

o_cookie_jar = http.cookiejar.CookieJar()
o_http_cookie_processor = urllib.request.HTTPCookieProcessor(o_cookie_jar)
o_url_opener = urllib.request.build_opener(o_http_cookie_processor)

d_post_params = {'action': 'login', 'lgname': s_login_name}
i_code, d_reply = api_request(d_post_params)
print('http code: %d' % (i_code))
print('api reply: %s' % (d_reply))

s_login_token = d_reply['login']['token']

d_post_params = {
    'action': 'login',
    'lgname': s_login_name,
    'lgpassword': s_login_password,
    'lgtoken':s_login_token
}
i_code, d_reply = api_request(d_post_params)
print('http code: %d' % (i_code))
print('api reply: %s' % (d_reply))
类、错误处理和子函数已被删除,以提高可读性

保存在o_url_opener中的cookies也可用于请求

您也可以通过index.php登录浏览器请求,但这将包括对HTML输出的解析

变量名称图例:

# Unicode string
s_* = 'a'
# Bytes (raw string)
r_* = b'a'
# Dictionary
d_* = {'a':1}
# Integer number
i_* = 4711
# Other objects
o_* = SomeClass()

通过mediawiki使用cookie的一种非常简单的方法如下:

from cookielib import CookieJar
import urllib2
import urllib
import json

cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
现在,可以使用opener进行请求。例如:

login_data = {
'action': 'login',
'lgname': 'Example',
'lgpassword': 'Foobar',
'format': 'json'
}
data = urllib.urlencode(login_data)
request = opener.open('http://en.wikipedia.org/w/api.php',data)
content = json.load(request)
login_data['token'] = content['login']['token']
data_2 = urllib.urlencode(login_data)
request_2 = opener.open('http://en.wikipedia.org/w/api.php',data_2)
content_2 = json.load(request_2)
print content_2['login']['result']

在上面的例子中,如果没有创建Cookiejar,登录将无法完全工作,需要另一个令牌。不过,建议将已经创建的mediawiki包装器(如、或)与python中的数百个其他mediawiki包装器一起使用。

将Cookie与mediawiki一起使用的非常简单的方法如下:

from cookielib import CookieJar
import urllib2
import urllib
import json

cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
现在,可以使用opener进行请求。例如:

login_data = {
'action': 'login',
'lgname': 'Example',
'lgpassword': 'Foobar',
'format': 'json'
}
data = urllib.urlencode(login_data)
request = opener.open('http://en.wikipedia.org/w/api.php',data)
content = json.load(request)
login_data['token'] = content['login']['token']
data_2 = urllib.urlencode(login_data)
request_2 = opener.open('http://en.wikipedia.org/w/api.php',data_2)
content_2 = json.load(request_2)
print content_2['login']['result']

在上面的例子中,如果没有创建Cookiejar,登录将无法完全工作,需要另一个令牌。不过,建议将已经创建的mediawiki包装器(如、、或)与python中的数百个其他mediawiki包装器一起使用。

检查此项:谢谢,这非常相关。您想用脚本解决哪个问题?检查此项:谢谢,这非常相关。您想用脚本解决哪个问题?