From 6d053b35c36ad29663ea0de71ce943ee45653281 Mon Sep 17 00:00:00 2001 From: Victor Shnayder Date: Tue, 5 Feb 2013 14:05:27 -0500 Subject: [PATCH] change sample upload script to work properly over https --- common/lib/sample-post.py | 44 ++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/common/lib/sample-post.py b/common/lib/sample-post.py index 21bf6d906b..ae71603710 100644 --- a/common/lib/sample-post.py +++ b/common/lib/sample-post.py @@ -2,46 +2,60 @@ import requests import sys +import getpass -def prompt(msg, default=None): +def prompt(msg, default=None, safe=False): d = ' [{0}]'.format(default) if default is not None else '' - print 'Enter {msg}{default}: '.format(msg=msg, default=d) - x = sys.stdin.readline().strip() + prompt = 'Enter {msg}{default}: '.format(msg=msg, default=d) + if not safe: + print prompt + x = sys.stdin.readline().strip() + else: + x = getpass.getpass(prompt=prompt) 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 = 'https://www.edx.org' +course_id = 'HarvardX/PH207x/2012_Fall' +location = 'i4x://HarvardX/PH207x/problem/ex_practice_2' - -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') +#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" +username = prompt('username on server', 'victor@edx.org') +password = prompt('password', 'abc123', safe=True) + +print "get csrf cookie" session = requests.session() r = session.get(server + '/') r.raise_for_status() -print session.cookies + +# 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'] +# for https, need a referer header +session.headers['Referer'] = server + '/' 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 +print "log in" +r = session.post(login_url, {'email': 'victor@edx.org', 'password': 'Secret!', 'remember': 'false'}) +#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() + +print ("To see the uploaded answer, go to {server}/courses/{course_id}/jump_to/{location}" + .format(server=server, course_id=course_id, location=location))