Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求模块未使用post方法_Python_Forms_Http_Python Requests_Python 3.3 - Fatal编程技术网

Python请求模块未使用post方法

Python请求模块未使用post方法,python,forms,http,python-requests,python-3.3,Python,Forms,Http,Python Requests,Python 3.3,我正在尝试将表单数据发布到URL。我没有得到预期的响应,并且对从请求模块(2.6.2)获得的一些信息感到好奇。以下是post方法: >>> response = requests.post(url, data={'uname':user, 'pwd':password,'phrase':'','submit':True}) 正如您所看到的,我正在使用post()方法,因此我希望该方法是post。数据对象的键与表单元素的名称匹配。URL是表单操作 >>> va

我正在尝试将表单数据发布到URL。我没有得到预期的响应,并且对从请求模块(2.6.2)获得的一些信息感到好奇。以下是post方法:

>>> response = requests.post(url, data={'uname':user, 'pwd':password,'phrase':'','submit':True})
正如您所看到的,我正在使用
post()
方法,因此我希望该方法是
post
数据
对象的键与表单元素的名称匹配。URL是表单操作

>>> vars(response.request)
{'method': 'GET', 'body': None, '_cookies': <<class 'requests.cookies.RequestsCookieJar'>[]>, 'headers': {'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'python-requests/2.6.2 CPython/3.3.6 Windows/8', 'Connection': 'keep-alive'}, 'hooks': {'response': []}, 'url': url}
那些看起来不错,只是,等一下!我的表格数据在哪里?为什么不随请求一起发送?我检查了历史记录,发现我被重定向了。这次我将
allow\u redirects=False
添加到我的
post()
调用中。然后检查
response.request
对象及其标题

>>> vars(response.request)
{'method': 'POST', 'body': 'phrase=&pwd=****&uname=****&submit=True', '_cookies': <<class 'requests.cookies.RequestsCookieJar'>[]>, 'headers': {'Accept-Encoding': 'gzip, deflate', 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'python-requests/2.6.2 CPython/3.3.6 Windows/8', 'Content-Length': '56', 'Accept': '*/*', 'Connection': 'keep-alive'}, 'hooks': {'response': []}, 'url': 'http://myurl.com/path/to/script.php'}
这些标题中同样没有表单数据。这是什么<代码>'Content-Type':'application/x-www-form-urlencoded'?这就是我的表单数据看起来像查询字符串的原因吗?正常的内容类型是什么?它的类型与Chrome在同一个URL上报告的类型相同,所以我怀疑这是问题所在

如果这些都没有引起注意,他们可能会聪明地拒绝来自非本地的帖子,对吗?我主要关心的是表单数据是
body
属性中的字符串,这似乎是错误的。如果没有,我可以聪明地设置HTTP头的来源吗

'application/x-www-form-urlencoded'
这是发布数据时的最佳选择

是的,如果您的POST数据看起来像一个查询字符串,这也没关系,这就是使用
x-www-form-urlencoded
发送它的方式。从上一链接:

控件名称/值按它们在文档中的显示顺序列出。名称与值之间用
=
分隔,名称/值对之间用
&
分隔

下一步:

这些标题中同样没有表单数据

对于POST,表单数据不会在标题中发送。它在请求正文中发送。试一试

>>> response.request.body
'uname=x&pwd=y&submit=True&phrase='

要查看此数据

我尝试使用
.post(headers={'origin':…,'host':…,…})
对标题进行欺骗,但没有任何区别。因此,您似乎在说一切看起来都是正确的。也许我的问题是,结果是保存我在会话cookie中寻找的内容。我试图在
post()
前面加上
session=requests.session()
以捕获这些请求。您是否建议使用更新问题以确定如何检索这些会话Cookie?当服务器希望客户端保存Cookie时,它将使用HTTP头
设置Cookie
进行响应。您可以通过使用
response.headers['set-cookie']
捕获这个cookie数据。好吧,肯定有什么事情发生在别处,因为我从这里得到的响应是302重定向。如果凭证被接受,它将是一个不同的页面,但它会将我返回到表单URL。我期望
set cookie
标题,但我没有得到它。我也没有收到关于不正确凭据的预期消息,因此它不能接受我的帖子数据。我感谢您的回答,并考虑它已经解决了我的问题,即使我仍然滞留一个未知的问题。如果您是302重定向到不正确的页面,我建议访问该页面与谷歌浏览器,并打开网络工具页(CTRL+Shift +J,然后点击“网络”选项卡)。在这里,您将看到浏览器发送的确切POST参数,您应该能够用Python模拟此请求,没有问题。您是对的,我正在使用GET请求重定向。我的问题是,在Chrome上的重定向中有一个
set cookie
头来存储
uname
和会话cookie中
pwd
值的变异。据我所知,我正在模仿所描述的请求。我在获取这些会话cookie时遇到了问题,但如果凭据得到验证,我也不会被重定向到预期的位置。显然,是我做错了什么。
'application/x-www-form-urlencoded'
>>> response.request.body
'uname=x&pwd=y&submit=True&phrase='