为什么我的Python 3.1 POST代码不能正确发送数据?

时间:2015-08-11 13:00:49

标签: python http post

我想使用Python 3.1发布这样的帖子(我只是在firefox上使用“copy as cURL”):

curl 'http://some.example.test/formulario.php?current_date=31%2F08%2F2015&Button_Insert=Include&ccsForm=apropriacao' -H 'Host: some.example.test' -H 'User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:39.0) Gecko/20100101 Firefox/39.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3' -H 'Accept-Encoding: gzip, deflate' -H 'DNT: 1' -H 'Referer: http://some.example.test/formulario.php?current_date=31%2F08%2F2015&Button_Insert=Confirm&Button_Insert=Include' -H 'Cookie: PHPSESSID=ctbsuli3i6f6mivof2dv9mb036; SERVERID=X' -H 'Connection: keep-alive' -H 'Content-Type: application/x-www-form-urlencoded' --data 'TextBox3=OK&idservice=14&idactivity=16&idsistem=1&TextBox1=&idproject=9&TextBox2=100&Button_Insert=Include&current_date=31%2F08%2F2015'

我在stackoverflow上进行了很多搜索,并且我制作了这段代码(只显示了必要的部分):

dataPostJson = {'TextBox3': 'OK', 'idservice': '14' etc}
params = json.dumps(dataPostJson).encode('utf8')

req = urllib.request.Request(url, data=params)

req.add_header('Host', 'some.example.test')
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 5.1; rv:39.0) Gecko/20100101 Firefox/39.0')
...
req.add_header('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')

response = urllib.request.urlopen(req)

即使使用response.getcode()== 200,POST也不会更改主机上的值。如果我尝试执行此cURL命令,则POST正常,因此问题不是主机。问题在于我的代码。

有人能给我一些线索吗?

编辑:

我想做的是: 1)使用我的凭据登录服务器 2)返回PHPSESSID和SERVERID 3)使用HTTP POST

将数据添加到服务器

需要考虑的事项:当我登录login.php时,服务器已经给了我一个PHPSESSID和SERVERID。当我发布我的凭据{'登录':'...','密码':'...','sendButton':'buttonValue'}时,我不知道如何检查用户/密码是否正确发送

我可以看到,如果我通过浏览器登录,请使用PHPSESSID和SERVERID,并将它们替换为cURL命令,我可以将数据发送到服务器。但是,使用python,我没有得到同样的成功。

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确翻译了#34;从cUrl请求到python requests的所有内容,但请尝试关注(安装requests包后)并让我知道结果:

import requests

url = 'http://some.example.test /formulario.php?current_date=31%2F08%2F2015&Button_Insert=Include&ccsForm=apropriacao'
headers = {
    'Host':'some.example.test',
    'User-Agent': 'Mozilla/5.0 (Windows NT 5.1; rv:39.0) Gecko/20100101 Firefox/39.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3',
    'Accept-Encoding': 'gzip, deflate',
    'DNT': '1',
    'Referer': 'http://some.example.test/formulario.php?current_date=31%2F08%2F2015&Button_Insert=Confirm&Button_Insert=Include',
    'Cookie': 'PHPSESSID=ctbsuli3i6f6mivof2dv9mb036; SERVERID=X',
    'Connection': 'keep-alive',
    'Content-Type': 'application/x-www-form-urlencoded',
            }

payload = {
    'TextBox3': 'OK',
    'idservice': '14',
    'idactivity': '16',
    'idsistem': '1',
    'TextBox1': '',
    'idproject': '9',
    'TextBox2': '100',
    'Button_Insert': 'Include',
    'current_date': '31%2F08%2F2015'
    }

r = requests.post(url, data=payload, headers=headers)