我的Django网站使用Apache服务器托管。我想使用我电脑上的python脚本,使用request.post将数据发送到我的网站,但它禁止了403。
import json
url = "http://54.161.205.225/Project/devicecapture"
headers = {'User-Agent':
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36',
'content-type': 'application/json'}
data = {
"nb_imsi":"test API",
"tmsi1":"test",
"tmsi2":"test",
"imsi":"test API",
"country":"USA",
"brand":"Vodafone",
"operator":"test",
"mcc":"aa",
"mnc":"jhj",
"lac":"hfhf",
"cellIid":"test cell"
}
response = requests.post(url, data =json.dumps(data),headers=headers)
print(response.status_code)
我还授予了包含将要发送请求的views.py目录的权限。 我经历了许多其他答案,但它们没有帮助。 我也尝试了没有 json.dumps 的代码,但是它也无法正常工作。 该如何解决?
答案 0 :(得分:1)
调查后,您看起来需要登录才能登录的URL是:http://54.161.205.225/Project/accounts/login/?next=/Project/
您可以通过在Chrome DevTools的“网络”标签中查看来确定发送后发请求所需的内容。这告诉我们,您需要发送字段username
,password
和csrfmiddlewaretoken
,您需要从页面中提取这些字段。
您可以通过从第一个get请求的响应中提取来获取它。它存储在这样的页面上:
<input type="hidden" name="csrfmiddlewaretoken" value="OspZfYQscPMHXZ3inZ5Yy5HUPt52LTiARwVuAxpD6r4xbgyVu4wYbfpgYMxDgHta">
因此,您需要执行某种正则表达式来获取它。您会解决的。
因此,首先您必须创建一个session
。然后使用获取请求加载登录页面。然后将带有您的登录凭据的发布请求发送到该URL。然后,您的会话将获得所需的cookie,这些cookie将使您可以将其发布到所需的URL。这是下面的示例。
import requests
# Create session
session = requests.session()
# Add user-agent string
session.headers.update({'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) ' +
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'})
# Get login page
response = session.get('http://54.161.205.225/Project/accounts/login/?next=/Project/')
# Get csrf
# Do something to response.text
# Post to login
response = session.post('http://54.161.205.225/Project/accounts/login/?next=/Project/', data={
'username': 'example123',
'password': 'examplexamplexample',
'csrfmiddlewaretoken': 'something123123',
})
# Post desired data
response = session.post('http://url.url/other_page', data={
'data': 'something',
})
print(response.status_code)
希望这应该可以帮助您。祝你好运。
有关更多信息,请查看以下有关请求的问题:Python Requests and persistent sessions
答案 1 :(得分:1)
我多次面对这种情况 问题是:
事物可能有助于调试:
检查apache错误日志以调查出了什么问题
尝试在本地运行服务器并发布到服务器,以确保问题与apache无关