现在我正在编写一个代码段,允许从命令行向http://www.spoj.com/提交代码,例如python spoj_cl.py test.cpp
我知道我需要使用指定的参数和cookie向相应的URL发送POST请求,但我仍然对要包含的参数感到困惑。现在我正在尝试使用试错法,这似乎不是很有效。我的问题是:
如何系统地检查发送POST请求时要包含哪些参数?
如何立即检查我发送的POST请求是否成功?我能想到的一种方法是获取提交页面http://www.spoj.com/status/的内容,但最好直接检查请求。
以下是我正在处理的片段。希望它应该是可读的。
import requests, sys
# if __name__ == "__main__":
base_url = "http://spoj.com"
autologin_hash = "*************" # Your user hash, taken from cookie
autologin_login = "************" # Your user name
session_id = "************" # Login session, can be retrieved when logged in
cookies_info = {
"autologin_login": autologin_login,
"autologin_hash": autologin_hash
}
ext_id = {
"cpp": "1"
}
filename = "test.cpp"
problem_name = str(filename.split(".")[0]).upper()
extension = filename.split(".")[1]
submit_url = base_url + "/submit/"
parts = {
"PHPSESSID": session_id,
"action": "/submit/complete",
"file": open(filename, "rb"),
"subm_file": "",
"lang": ext_id[extension],
"problemcode": problem_name
}
requests.post(submit_url,
params={"PHPSESSID": session_id},
files=parts,
cookies=cookies_info)
print "Submission sent!"
答案 0 :(得分:0)
我不是网站spoj.com的成员,但您要求的是基本的网络抓取。找到用于在网站上提交代码的HTML表单,然后使用Firebug或Chrome开发人员控制台查找具有名称属性的HTML输入元素。找到它们之后,您可以制作一个Python脚本来系统地检查这些元素。如果有一天元素丢失,页面可能会改变。
示例代码:
webpage = requests.get(form_url, params={"PHPSESSID": session_id}, cookies=cookies_info)
html = BeautifulSoup(webpage.text)
form = html.find('form')
inputs = form.findAll('input')
names = []
for i in inputs:
names.append(i['name'])
检查响应的状态代码。成功请求应为200
。
# Make the request
r = requests.post(submit_url,
params={"PHPSESSID": session_id},
files=parts,
cookies=cookies_info)
# Check the response code
if r.status_code == '200':
print "Submission successful!"
else:
print "Submission met a status code of: %s" % r.status_code