基本上我想发送以下表单的POST请求。
<form method="post" action="">
449 * 803 - 433 * 406 = <input size=6 type="text" name="answer" />
<input type="submit" name="submitbtn" value="Submit" />
</form>
我基本上想要做的是阅读页面,找出表单中的等式,计算答案,输入答案作为参数发送POST请求,但不打开页面的新URL,如每次打开页面时都会出现一个新的等式,因此先前获得的结果已经过时。最后,我想获取发送POST请求后出现的页面。我不得不在不打开新URL实例的情况下发送POST请求。此外,我将非常感谢有关如何在POST请求后再次阅读页面的帮助。 (会调用read()
就够了吗?)
我目前的python代码看起来像这样。
import urllib, urllib2
link = "http://www.websitetoaccess.com"
f = urllib2.urlopen(link)
line = f.readline().strip()
equation = ''
result = ''
file1 = open ('firstPage.html' , 'w')
file2 = open ('FinalPage.html', 'w')
for line in f:
if 'name="answer"' in line:
result = getResult(line)
file1.write(line)
file1.close()
raw_params = {'answer': str(result), 'submit': 'Submit'}
params = urllib.urlencode(raw_params)
request = urllib2.Request(link, params)
page = urllib2.urlopen(request)
file2.write(page.read())
file2.close()
答案 0 :(得分:1)
是的,最后一个链接确实有帮助,结果我只需要从这样的请求创建一个新会话:
s = requests.session()
res1 = s.get(url)
在
之后添加此作为帖子请求res2 = s.post(url, data=post_params)
我相信这可以实现从get请求中存储cookie并使用post请求发送它们的结果,从而保持与之前的get请求相同的问题。非常感谢你对Loknar这个问题的帮助和帮助。
答案 1 :(得分:0)
我有点疑惑,POST请求将始终是一个新的单独请求,所以我不明白你的意思&#34;没有打开一个新的URL实例&#34; ...您是否已尝试查看当您在此脚本中手动执行此操作时会发生什么?与Chrome中的开放式开发者控制台一样,转到网络标签,切换保留日志,删除历史记录,然后执行您尝试手动执行的操作?然后在python中复制它?另外我建议你试试请求模块,它比使用urllib更简单。只需DROP FUNCTION IF EXISTS myFunc;
DELIMITER $$
CREATE FUNCTION myFunc(
param CHAR(1)
) RETURNS INT;
BEGIN
DECLARE res INT;
SELECT count(Dominio) INTO res FROM Thogar WHERE DOMINIO=param;
RETURN res;
END;
$$
DELIMITER ;
(和pip install requests
)。
pip install lxml
编辑:
您可能会遇到一些标题问题或Cookie问题。您可能正在接收一些会话ID,使服务器能够确定您在之前的GET请求中收到的问题。 POST请求是来自先前GET请求的单独请求,它不能组合成单个请求。您应该检查从上一个GET请求收到的标头和/或尝试设置会话/ cookie处理(如果使用请求,则很容易,请参阅http://docs.python-requests.org/en/master/user/advanced/)。