使用Python'登录并上传文件;请求';

使用Python'登录并上传文件;请求';,python,http,python-requests,Python,Http,Python Requests,我需要登录并上传一个文件。我面临的问题是,登录页面不同于上传页面。如果必须手动操作,我将登录(login.php)到该站点,然后导航到上载页面(uploader.php)上载文件。这就是我写的: import requests url1='http://www.abc.com/login.php' r = requests.post(url1, auth=('uname', 'pword')) print r.status_code //msg:'200' payload = {'uploa

我需要登录并上传一个文件。我面临的问题是,登录页面不同于上传页面。如果必须手动操作,我将登录(
login.php
)到该站点,然后导航到上载页面(
uploader.php
)上载文件。这就是我写的:

import requests

url1='http://www.abc.com/login.php'
r = requests.post(url1, auth=('uname', 'pword'))
print r.status_code //msg:'200'

payload = {'upload':open('./tmp.txt')}
url2='http://www.abc.com/uploader.php'
r = requests.post(url2, data=payload)
print r.text //msg: "you must first login to upload the file"
我的代码显然没有按预期工作。登录部分工作正常,但未上载部分。 请问我怎样才能实现我的目标

更新:

为了更深入地了解我的问题,我提供了
login.php
uploader.php
文件详细信息:

login.php

<form method="POST" action="login.php" class="login">
<input type="text" name="username"></input>
<input type="password" name="password"></input>        
<input type="submit" value="Login"></input>
<form action='uploader.php' method='POST' id='form' class='upload' enctype="multipart/form-data" >
<input type='file' name='upload' id='file'></input>
<input type='button' value='Analyze' name='button' onclick='javascript: checkuploadform(false)'>

uploader.php

<form method="POST" action="login.php" class="login">
<input type="text" name="username"></input>
<input type="password" name="password"></input>        
<input type="submit" value="Login"></input>
<form action='uploader.php' method='POST' id='form' class='upload' enctype="multipart/form-data" >
<input type='file' name='upload' id='file'></input>
<input type='button' value='Analyze' name='button' onclick='javascript: checkuploadform(false)'>

创建一个会话,然后使用该会话执行您的请求-

sessionObj = requests.session()
sessionOj.get(...) # Do whatever ...
会话将保存cookie以备将来请求。
并使用用户名、密码的post参数作为登录
login.php所需的参数,而不是验证用户名密码。
还可以使用
文件
参数上载文件。 所以最后的代码是——

import requests

sessionObj = requests.session()
url1='http://www.abc.com/login.php'
r = sessionObj.post(url1, params={'username':'usernamehere' , 'password':'password here'})
print r.status_code //msg:'200'


filehandle = open('./tmp.txt')
url2='http://www.abc.com/uploader.php'
r = sessionObj.post(url2, data={},files = {'upload':filehandle})
print r.text

谢谢您的回答。但是,我仍然犯了这个错误。我已经更新了这个问题,以便更深入地了解
login.php
uploader.php
你说要发布的代码在哪里?我已经发布了。为什么它不可见?嘿,根据上面的html,当它应该发布时,你正在对login.php进行get请求。更新了一些更改的答案,它的
post
,我在问题中对它进行了编辑。但我还是收到了同样的错误信息。