【问题标题】:Python - 403 Access Denied When POST RequestPython - POST 请求时拒绝访问 403
【发布时间】:2019-05-02 02:29:46
【问题描述】:

尽管我收到 403 Access Denied,但我让 python 发送了一个 POST 请求,如下所示。我什至加入了代理(我知道网站上没有禁止代理),但我似乎仍然遇到同样的错误。

data = {'authToken': '3040141554%2CbCFq3TBCs6HpcoS4y8%2B%2FtD2wmOeTYUvjNs%2FEy9nQ94E%3D',
        'actionType': 'add',
        'formName': 'createFamilyUser',
        'layout': 'user/createFamilyUser',
        'storeId': '18',
        'langId': '-26',
        'addressType': 'SB',
        'customerPanelInDB': 'false',
        'ppAction': 'createFamilyUser',
        'firstName': 'First',
        'lastName': 'Last',
        'birthDay': '4',
        'birthMonth': '2',
        'birthYear': '2000',
        'address1': '123 Test St',
        'city': 'Test City',
        'state': 'QLD',
        'zipCode': '1234',
        'email1': 'xxxx@gmail.com',
        'email1_verify': 'xxxx@gmail.com',
        'phone2': '0420657499',
        'logonPassword': 'Password123#',
        'logonPasswordVerify': 'Password123#',
        'storeNumber': '919',
        'acceptCond': 'true'}


proxies = {'http': 'http://MyProxyHere', 'https': 'http://MyProxyHere'}

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0'}

r = requests.post('https://secure.ikea.com/webapp/wcs/stores/servlet/ProtectedCreateUser', data=data, proxies=proxies, headers=headers)
print(r.status_code) # Prints 200
print(r.text)

它正在我的终端中返回:

403
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>

You don't have permission to access "http&#58;&#47;&#47;secure&#46;ikea&#46;com&#47;webapp&#47;wcs&#47;stores&#47;servlet&#47;ProtectedCreateUser" on this server.<P>
Reference&#32;&#35;18&#46;6367a5c&#46;1556763656&#46;439c5486
</BODY>
</HTML>

我实际上是在尝试在宜家创建一个帐户。我知道我的代理没有被禁止,因为我可以使用 selenium 在前端创建一个帐户,它工作得很好,但是通过这种方法它非常慢。任何有关此问题的解决方法的帮助将不胜感激...

【问题讨论】:

  • 身份验证令牌可能已过期。他们不会告诉你哪里出了问题,因为这不是他们期望的用法。祝你好运。
  • 您是否尝试在headers 中使用authToken,而不是在data 中?我认为 authToken 通常用于 header
  • @ShioT 尝试使用新的身份验证令牌,但仍然没有运气:/
  • @Jin Yep 也试过了,仍然返回 403...
  • 您可能必须使用CreateFamilyUser 表单获取页面才能获得隐藏在HTML 中的新鲜authToken。您可能还需要 Session() 来保存 cookie。服务器可能会将authToken 与一些cookie 进行比较。然后您可以尝试使用此 authToken 和表单中隐藏的其他值进行 POST。

标签: python python-3.x post python-requests


【解决方案1】:

身份验证令牌将始终更改,因此您无法保留它。

以下代码应该可以工作:

import requests
import lxml

session = requests.Session()

data = {'storeId': '12',
        'langId': '-1',
       'from': 'null'}

response = session.post('https://secure.ikea.com/webapp/wcs/stores/servlet/CreateUser')
authToken = lxml.html.fromstring(response.content).xpath('//*[@id="createUser_authToken_In_Register_1"]')[0]

data = {'authToken': authToken,
    'actionType': 'add',
    'formName': 'createFamilyUser',
    'layout': 'user/createFamilyUser',
    'storeId': '18',
    'langId': '-26',
    'addressType': 'SB',
    'customerPanelInDB': 'false',
    'ppAction': 'createFamilyUser',
    'firstName': 'First',
    'lastName': 'Last',
    'birthDay': '4',
    'birthMonth': '2',
    'birthYear': '2000',
    'address1': '123 Test St',
    'city': 'Test City',
    'state': 'QLD',
    'zipCode': '1234',
    'email1': 'xxxx@gmail.com',
    'email1_verify': 'xxxx@gmail.com',
    'phone2': '0420657499',
    'logonPassword': 'Password123#',
    'logonPasswordVerify': 'Password123#',
    'storeNumber': '919',
    'acceptCond': 'true'}


proxies = {'http': 'http://MyProxyHere', 'https': 'http://MyProxyHere'}

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0'}

r = session.post('https://secure.ikea.com/webapp/wcs/stores/servlet/ProtectedCreateUser', data=data, proxies=proxies, headers=headers)

【讨论】:

  • 看起来不错,但我收到 IndexError: list index out of range 的线路 authToken = lxml.html.fromstring(response.content).xpath('//*[@id="createUser_authToken_In_Register_1"]')[0]
猜你喜欢
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多