2015-06-17 61 views
1

我想发送一个使用python的发布请求,出于某些特定的原因。 更具体地说,我想在本网站http://bac.menara.ma/ministere/上将“12064608”发送到“国家代码”。使用Python手动发送Post方法

问题是,如果我手动发送它,响应与我们发送输入'12064608'到输入不同。我发现了很多python的和平代码,但我发现问题出现在Post方法中。 这是我的代码:

import requests 
    data = requests.post('http://bac.menara.ma/ministere/', {'txt1': 12064608 , 'texte2' : '%2324po8%23%234'}) 
    print data.text 

来说明: http://imgur.com/S7a7500

+1

哪里是你的代码? – sgp

回答

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 

如果您不需要使用requestsmechanize更容易使用,因为它会照顾饼干和任何隐藏的表单字段两个:

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 
+0

'txt1'的帖子应该是'12064608' – heinst

+0

非常感谢。 –

+0

@heinst:这只是一个例子。 – mhawke

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) 
+0

最好使用'requests.session'而不是硬编码cookie。 – mhawke