为了账号安全,请及时绑定邮箱和手机立即绑定

使用请求发布方法登录网站

使用请求发布方法登录网站

HUWWW 2021-06-25 14:46:57
我正在尝试登录此网站:https : //www.blackrock.com/userplatform/signOn我正在使用以下脚本来执行此操作:import requestsfrom bs4 import BeautifulSoupheaders = {    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0'}resp = requests.get('https://www.ishares.com/us/sign-on.saml', headers=headers)soup_object =  BeautifulSoup(resp.text, 'html.parser')csrf = soup_object.select_one('meta[name="_csrf"]').get('content')login_data = dict(userName='USERNAME', password='PASSWORD', csrfmiddlewaretoken=csrf)r = requests.post('https://www.blackrock.com/userplatform/signOn', data=login_data, headers={"Referer": "https://www.blackrock.com"})但是,当我在邮递员中运行脚本时,它给了我禁止的 403 错误消息。有人可以建议我做错了什么吗?该站点甚至共享了一个脚本,用于登录其门户并下载一些文件。但是它是用perl写的。共享该脚本以供参考。但我想用python来做。use strict;use File::Basename;use Getopt::Long;use WWW::Mechanize;use URI qw( );my $thisScript = basename($0);print "==START $thisScript==\n";my ($help, $proxy, $username, $password);my $urlsToBeDownloaded = "file-url-list.txt";my $url = "https://www.ishares.com/us/sign-on.saml";usage() if (@ARGV < 2 or ! GetOptions('proxy:s' => \$proxy,                                       'username=s' => \$username,                                       'password=s' => \$password)                         or defined $help);if ($username eq "" || $password eq "") {        usage();}my $mech = WWW::Mechanize->new();if($proxy ne ""){    $mech->proxy(['http', 'https'], $proxy);    }$mech->get($url);$mech->submit();my $ctoken = $mech->field('ctoken');$mech->get($mech->uri());$mech->submit_form(        form_number => 1,        fields    => {                        userName => $username,                        password  => $password,                        ctoken  => $ctoken                     });
查看完整描述

2 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

它看起来像第三关键是_csrf而不是csrfmiddlewaretoken在login_data变量:

= >

login_data = dict(userName='USERNAME', password='PASSWORD', _csrf=csrf)


查看完整回答
反对 回复 2021-06-29
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

首先尝试使用 requests.session 它将自动存储和更新所有 cookie 和标头,因此您不必在每个请求中添加它们。


在 perl 脚本中的第二个我可以看到它们是 srt ctoken,我猜这是 csrf 令牌。所以你的帖子数据应该是这样的:


{

“userName”: “your username”,

“password”: “your password”,

“ctoken”: “the csrf token”

}

另外不要忘记在每次请求后更新 csrf 令牌。


查看完整回答
反对 回复 2021-06-29
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信