Python SPOJ命令行提交:POST方法中包括什么?

Python SPOJ命令行提交:POST方法中包括什么?,python,post,Python,Post,现在我正在编写一个允许从命令行向提交代码的代码片段,例如pythonspoj_cl.py test.cpp 我知道我需要用指定的参数和cookie将POST请求发送到相应的URL,但我仍然不知道应该在其中包含哪些参数。现在,我正在尝试一种错误的方法,这似乎不是很有效。我的问题是: 如何系统地检查发送POST请求时要包含哪些参数 如何立即检查我发送的POST请求是否成功?我可以想到的一种方法是获取提交页面的内容,但最好直接检查请求 下面是我正在编写的代码片段。希望它应该是可读的 import re

现在我正在编写一个允许从命令行向提交代码的代码片段,例如
pythonspoj_cl.py test.cpp

我知道我需要用指定的参数和cookie将POST请求发送到相应的URL,但我仍然不知道应该在其中包含哪些参数。现在,我正在尝试一种错误的方法,这似乎不是很有效。我的问题是:

  • 如何系统地检查发送POST请求时要包含哪些参数

  • 如何立即检查我发送的POST请求是否成功?我可以想到的一种方法是获取提交页面的内容,但最好直接检查请求

  • 下面是我正在编写的代码片段。希望它应该是可读的

    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!"
    
  • 如何系统地检查发送POST请求时要包含哪些参数
  • 我不是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'])
    
  • 如何立即检查我发送的POST请求是否成功
  • 检查响应的状态代码。对于成功的请求,它应该是
    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
    

    我应该澄清第二部分,问题是,即使我发送了一个没有完整参数的POST请求,我仍然得到200个响应,但没有成功提交。啊,在这种情况下,你可能不得不在结果页上搜索UI错误。