0
我想从桌面ERP发送一些数据库信息到django web服务器,作为web界面。 我尝试过的第一件作品是使用请求模块来“伪装”一个带有附加文件的POST。 但是,这是一个明显肮脏(但有效)的方式来做到这一点。 我通过会话使用身份验证。 有没有一个干净的(呃)方法来做到这一点?用桌面程序数据喂django web服务器
我的代码:
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.5',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0',
'Referer': 'https://auth.afip.gov.ar/contribuyente/',
'Connection': 'keep-alive',
}
session = requests.Session()
response = session.get('http://192.168.0.101:8000/sincronizacion/', headers=headers)
soup = BeautifulSoup(response.text)
csrf_value = soup.find(attrs={'name': 'csrfmiddlewaretoken', })['value']
login_info = {'username': 'user', 'password': 'pass', 'csrfmiddlewaretoken': csrf_value,
'next': '/sincronizacion/', }
response = session.post('http://192.168.0.101:8000/login/?next=/sincronizacion/', data=login_info, headers=headers)
soup = BeautifulSoup(response.text)
csrf_value = soup.find(attrs={'name': 'csrfmiddlewaretoken', })['value']
datos_odontologos = {'test': 'test', 'csrfmiddlewaretoken': csrf_value} # test represents a future csv attachment
response = session.post('http://192.168.0.101:8000/sincronizacion/', data=datos_odontologos)
print(response.status_code)
这是正确的。但我认为你不必自己处理cookie。请求'会话管理自己的cookiejar – gawel
@gawel我试图从发布数据中删除csrfmiddleware并得到了403错误..也许我们需要发布帖子和cookie数据? – Alvaro
对。抱歉。您可以从cookie中检索令牌,但至少要提供http标头,而不是cookie https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax – gawel