使用请求

时间:2016-08-10 11:54:20

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

我需要在一个有要求的网站上登录我,但我尝试过所有工作:

from bs4 import BeautifulSoup as bs
import requests
s = requests.session()
url = 'https://www.ent-place.fr/CookieAuth.dll?GetLogon?curl=Z2F&reason=0&formdir=5'


def authenticate():
    headers = {'username': 'myuser', 'password': 'mypasss', '_Id': 'submit'}
    page = s.get(url)
    soup = bs(page.content)
    value = soup.form.find_all('input')[2]['value']
    headers.update({'value_name':value})
    auth = s.post(url, params=headers, cookies=page.cookies)

authenticate()

或:

import requests

payload = {
    'inUserName': 'user',
    'inUserPass': 'pass'
}

with requests.Session() as s:
    p = s.post('https://www.ent-place.fr/CookieAuth.dll?GetLogon?curl=Z2F&reason=0&formdir=5', data=payload)
    print(p.text)
    print(p.status_code)
    r = s.get('A protected web page url')
    print(r.text)

当我使用.status_code尝试此操作时,它会返回200,但我想要401或403来执行像#39;如果登录' ...

我找到了这个,但我认为它适用于python 2,但是我使用python 3而且我不知道如何转换......:

import requests
import sys

payload = {
    'username': 'sopier',
    'password': 'somepassword'
}

with requests.Session(config={'verbose': sys.stderr}) as c:
    c.post('http://m.kaskus.co.id/user/login', data=payload)
    r = c.get('http://m.kaskus.co/id/myform')
    print 'sopier' in r.content

有人知道怎么办? 因为每个我都测试了我发现的所有脚本并且它不起作用......

1 个答案:

答案 0 :(得分:0)

当您提交登录时,POST请求将发送到https://www.ent-place.fr/CookieAuth.dll?Logon而不是https://www.ent-place.fr/CookieAuth.dll?GetLogon?curl=Z2F&reason=0&formdir=5 - 之后您将被重定向到该URL。

当我测试这个时,post请求包含以下参数:

curl:Z2F
flags:0
forcedownlevel:0
formdir:5
username:username
password:password
SubmitCreds.x:69
SubmitCreds.y:9
SubmitCreds:Ouvrir une session

因此,您可能还需要提供这些附加参数。

此外,行s.post(url, params=headers, cookies=page.cookies)不正确。您应该将headers传递给关键字参数data,而不是params - params对请求网址进行编码 - 您需要在表单数据中传递它。当你说payload

时,我假设你真的是headers
s.post(url, data=headers, cookies=page.cookies)

您尝试登录的网站在处理登录表单时有一个onClick JavaScript。 requests将无法为您执行JavaScript。这可能会导致网站功能出现问题。