From 697c1d7bc9eba15c905f628c6df8b9e29be8d139 Mon Sep 17 00:00:00 2001 From: Victor Shnayder Date: Fri, 21 Dec 2012 12:47:00 +0100 Subject: [PATCH] sample script to log in and upload an answer to a problem --- common/lib/sample-post.py | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 common/lib/sample-post.py diff --git a/common/lib/sample-post.py b/common/lib/sample-post.py new file mode 100644 index 0000000000..21bf6d906b --- /dev/null +++ b/common/lib/sample-post.py @@ -0,0 +1,47 @@ +# A simple script demonstrating how to have an external program save results to the server + +import requests +import sys + +def prompt(msg, default=None): + d = ' [{0}]'.format(default) if default is not None else '' + print 'Enter {msg}{default}: '.format(msg=msg, default=d) + x = sys.stdin.readline().strip() + if x == '' and default is not None: + return default + return x + +# http://127.0.0.1:8000/courses/MITx/7012x/2013_Spring/modx/i4x://MITx/7012x/problem/example_functional_groups/problem_check + + +server = prompt('Server (no trailing slash)', 'http://127.0.0.1:8000') +course_id = prompt('Course id', 'MITx/7012x/2013_Spring') +location = prompt('problem location', 'i4x://MITx/7012x/problem/example_upload_answer') +value = prompt('value to upload') + +print "logging in" +session = requests.session() +r = session.get(server + '/') +r.raise_for_status() +print session.cookies + +# for some reason, the server expects a header containing the csrf cookie, not just the +# cookie itself. +session.headers['X-CSRFToken'] = session.cookies['csrftoken'] +login_url = '/'.join([server, 'login']) + +r = session.post(login_url, {'email': 'victor@edx.org', 'password': 'abc123'}) +print "request headers: ", r.request.headers +print "response headers: ", r.headers +r.raise_for_status() + +url = '/'.join([server, 'courses', course_id, 'modx', location, 'problem_check']) +data = {'input_{0}_2_1'.format(location.replace('/','-').replace(':','').replace('--','-')): value} +#data = {'input_i4x-MITx-7012x-problem-example_upload_answer_2_1': value} + + + +print "Posting to '{0}': {1}".format(url, data) + +r = session.post(url, data) +r.raise_for_status()