urllib2.HTTPError:HTTP错误405:此URL不支持HTTP方法POST

时间:2012-06-12 15:36:31

标签: python urllib2 recaptcha

我正在编写一个脚本,它需要使用指定的公钥来获取reCAPTCHA质询,所以如果我用urllib2打开它,我就会这样做:

chp = urllib.urlencode(dict({'k': key}))
chg = urllib2.urlopen('http://www.google.com/recaptcha/api/challenge', chp).read()

然后我可以从那里接受挑战并返回它,但是当它这样做时我得到错误:

urllib2.HTTPError: HTTP Error 405: HTTP method POST is not supported by this URL

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

改为使用GET请求:

chp = urllib.urlencode(dict({'k': key}))
chg = urllib2.urlopen('http://www.google.com/recaptcha/api/challenge?' + chp).read()

正如urllib2 documentation所述:

  

数据可以是指定要发送到服务器的其他数据的字符串,如果不需要这样的数据,则为None。目前,HTTP请求是唯一使用数据的请求;当提供数据参数时,HTTP请求将是POST而不是GET。

您将chp作为POST数据传递,将其作为第二个位置参数传递给urlopen方法。使用?将其连接到URL,而不是使其成为GET请求。