使用Python手动发送Post方法

2024-09-29 23:23:32 发布

您现在位置:Python中文网/ 问答频道 /正文

出于某些特定的原因,我想使用python发送post请求。 更具体地说,我想把'12064608'发送到这个网站http://bac.menara.ma/ministere/的“国家代码”中。你知道吗

问题是,如果我手动发送它,则响应与在输入中输入“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


Tags: 方法代码httpdata网站原因手动国家
2条回答

您可能需要每隔一段时间手动执行一次,以获取新的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)

您可以使用^{}。使用requests.session可以很容易地跟踪cookies,您必须在初次访问时获得这些cookies。请注意,表单包含一个可能更改的隐藏字段。我没有观察到它的变化,但是如果需要,可以使用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^{}更容易使用,因为它将同时处理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

相关问题 更多 >

    热门问题