If you are not sure you are getting the real reason(s) from the employer for your rejection, you can test the validity by isolating the specific reason given. For example, if you were told that you were rejected because of low grades, ask, "If my GPA were higher, would you have been willing to consider hiring me?" If GPA is the only issue, the answer will be affirmative. If not, other issues may come creeping out. This technique can become especially valuable when the primary answer is simply a smoke screen for something the employer is not initially willing to share with you.
You cannot refute the unknown.
A recent graduate, Peter, was rejected after final interviews due to what was termed "high salary requirements." He told the manager his salary range was flexible and asked, "At what salary range would you be willing to hire me?" "Actually, salary is not the only issue. We also received a rather poor report on you from one of the recent graduates from your school." Ah, the truth comes out! The "poor report" had come from a graduate now working at the employer who had difficulty working with Peter on a team assignment at school the prior year. Peter had not spoken with him in over a year, but it was now making the difference in getting the job he wanted. Peter took the initiative to contact the former classmate and invited him to lunch. Apparently, much of the "poor report" had to do with the classmate's view of how Peter would fit into the company culture. Peter used to have a beard and wore tattered jeans to class. All that had since changed, but that was the last image the classmate had of Peter. Peter brought him up to date on his accomplishments and even convinced him to write a letter of recommendation. Does all of this seem like a lot of extra effort? Possibly. But the bottom line is that that company did eventually hire him.
Isolate the real reason. And change it if you can.