How to check if request post has been successfully posted?

Question:

I’m using the python requests module to handle requests on a particular website i’m crawling. I’m fairly new to HTTP requests, but I do understand the basics. Here’s the situation. There’s a form I want to submit and I do that by using the post method from the requests module:

# I create a session
Session = requests.Session()
# I get the page from witch I'm going to post the url
Session.get(url)
# I create a dictionary containing all the data to post
PostData = {
  'param1': 'data1',
  'param2': 'data2',
}
# I post
Session.post(SubmitURL, data=PostData)

Is there a any ways to check if the data has been successfully posted?
Is the .status_code method a good way to check that?

Asked By: ronnow

||

Answers:

If you pick up the result from when you post you can then check the status code:

result = Session.post(SubmitURL, data=PostData)
if result.status_code == requests.codes.ok:
    # All went well...
Answered By: Joakim

I am a Python newbie but I think the easiest way is:

if response.ok:
    # whatever

because all 2XX codes are successful requests not just 200

Answered By: aruizca

I am using this code:

import json

def post():
    return requests.post('http://httpbin.org/post', data={'x': 1, 'y': 2})

def test_post(self):
    txt = post().text
    txt = json.loads(txt)
    return (txt.get("form") == {'y': '2', 'x': '1'})
Answered By: Ori Ashkenazi

For POST responses, the response status code is usually 201 (especially with RestAPIs) but can be 200 sometimes as well depending on how the API has been implemented.
There are a few different solutions:

Solution #1 (use the framework to raise an error) – Recommended:

from requests.exceptions import HTTPError

try:
    response = Session.post(SubmitURL, data=PostData)
    # No exception will raised if response is successful
    response.raise_for_status()
except HTTPError:
    # Handle error
else:
    # Success

Solution #2 (explicitly check for 200 and 201):

from http import HttpStatus

response = Session.post(SubmitURL, data=PostData)
if response.status_code in [HttpStatus.OK, HttpStatus.CREATED]:
    # Success

Solution #3 (all 200 codes are considered successful):

from http import HttpStatus

response = Session.post(SubmitURL, data=PostData)
if response.status_code // 100 == 2:
    # Success
Answered By: theQuestionMan