簡體   English   中英

使用Python中的Requests庫發送POST數據

[英]Sending POST data with Requests library in Python

我無法使用Python中的請求庫發送POST數據來訪問我的帳戶。 生成的soup與沒有發送POST的情況相同這是我在不同站點上使用和處理的代碼:

def get_data(final_url):
    payload = {'session[email]':'myemail@myemail.com','session[password]':'mypwd','session[remember_me]':'0','commit':'Sign in'}
    with requests.session() as ses:
        log_soup = BeautifulSoup(ses.get('https://www.login-page.com/login').text)
        payload['utf8'] = log_soup.findAll('input',attrs={'name':'utf8'})[0].get('value')
        payload['authenticity_token'] = log_soup.findAll('input',attrs={'name':'authenticity_token'})[0].get('value')
        ses.post('https://www.login-page.com/login',data=payload)
        req = ses.get(final_url)

        soup = BeautifulSoup(req.text)

    return soup


<form accept-charset="UTF-8" action="/sign_in" class="main_form" id="new_session" method="post" novalidate="novalidate"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;"/><input name="authenticity_token" type="hidden" value="l5+2s90FtEUsS3GHlr2tAktcxSW8jqgXx3mXEwIlAzE="/></div><div class="error_message">
</div>
<dl>
<dt><label for="session_email">Email</label></dt>
<dd>
<div class="input_border"><input autofocus="autofocus" class="text required email" id="session_email" name="session[email]" placeholder="Email" size="30" type="email"/></div>
</dd>
</dl>
<dl>
<dt><label for="session_password">Password</label></dt>
<dd>
<div class="input_border"><input class="text required" id="session_password" name="session[password]" placeholder="Password" size="30" type="password"/></div>
</dd>
</dl>
<div class="checkbox_field"><input name="session[remember_me]" type="hidden" value="0"/><input id="session_remember_me" name="session[remember_me]" type="checkbox" value="1"/><label for="session_remember_me">Remember me</label></div>
<table class="buttons">
<tr>
<td><input class="button public" data-disable-with="Please wait..." name="commit" type="submit" value="Sign in"/></td>
<td class="forgot_password"><a href="/passwords/new">Forgot your password?</a></td>
</tr>
</table>
</form>

手動登錄后獲取的POST數據如下:

utf8:✓
authenticity_token:l5+2s90FtEUsS3GHlr2tAktcxSW8jqgXx3mXEwIlAzE=
session[email]:myemail@myemail.com
session[password]:mypwd
session[remember_me]:0

非常感謝您的幫助!

您使用的是什么版本的請求? 如果它介於0.14.x和1.2.0之間,則必須升級到1.2.0。 會話中的Cookie將無法在重定向上正確設置,1.2.0會修復此問題。

另一個問題是,您應該檢查ses.post(url, data=payload)的響應。 你肯定應該檢查你是否收到了正確的狀態代碼(在這種情況下,因為你期望重定向),這些代碼就是301或302。

假設上述所有檢查結果,您的網站可能正在做一些時髦的User-Agent分析,您可能還想用瀏覽器用戶代理字符串檢查,例如,

ses.headers['User-Agent'] = '...'
response = ses.post(url, data=payload)
final_response = ses.get(final_url)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM