我想出于某些特定原因使用python发送帖子请求。 更具体一点,我想在本网站http://bac.menara.ma/ministere/中将“12064608”发送到“代码国家”。
问题在于,如果我手动发送,则响应与我们将“12064608”输入到输入中的情况不同。我找到了很多python代码来实现它,但我发现问题在于它自己的Post方法。 这是我的代码:
import requests
data = requests.post('http://bac.menara.ma/ministere/', {'txt1': 12064608 , 'texte2' : '%2324po8%23%234'})
print data.text
答案 0 :(得分:0)
您可能需要每隔一段时间手动执行一次,以获得新的JSESSIONID
,因为它可能会过期。
import requests
url = "http://bac.menara.ma/ministere/resultat.jsp"
payload = "texte2=%2324po8%23%234&txt1=12064608"
headers = {
'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
'origin': "http//bac.menara.ma",
'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36",
'content-type': "application/x-www-form-urlencoded",
'referer': "http//bac.menara.ma/ministere/",
'accept-encoding': "gzip, deflate",
'accept-language': "en-US,en;q=0.8",
'cookie': "JSESSIONID=7EF23C675238D7AC936A58CFCA5CBA35; ___utmgb=e#ebzb; __utmt=1; __utma=268890082.1354194921.1434543682.1434543682.1434543682.1; __utmb=268890082.3.10.1434543682; __utmc=268890082; __utmz=268890082.1434543682.1.1.utmcsr=stackoverflow.com|utmccn=(referral)|utmcmd=referral|utmcct=/questions/30891272/sending-post-method-manually-using-python"
}
response = requests.request("POST", url, data=payload, headers=headers)
print(response.text)
答案 1 :(得分:0)
您可以使用requests
。使用requests.session
可以轻松跟踪您必须通过初次访问获得的cookie。请注意,表单包含可能更改的隐藏字段。我还没有观察到它的变化,但如果你需要,你可以使用BeautifulSoup从表单中提取它,或者在紧要关头使用正则表达式。
import requests
from bs4 import BeautifulSoup
s = requests.session()
r = s.get('http://bac.menara.ma/ministere/') # go to form page, get cookies and "hidden" form field
soup = BeautifulSoup(r.content)
texte2 = soup.find('input', attrs={'name': 'texte2'})['value']
data = {'txt1': '12345678', 'texte2': texte2}
r = s.post('http://bac.menara.ma/ministere/resultat.jsp', data=data)
html = r.content
assert 'Nom ; ELOUARDI ASSIA' in html
如果您不需要使用requests
,mechanize
更容易使用,因为它会处理Cookie和任何隐藏的表单字段:
from mechanize import Browser
br = Browser()
r = br.open('http://bac.menara.ma/ministere')
br.select_form(nr=0)
# print br.form # displays form fields and target URL
br.form['txt1'] = '12345678'
r = br.submit()
html = r.read()
assert 'Nom ; ELOUARDI ASSIA' in html