urllib2.HTTPError: HTTP Error 405: el método HTTP POST no es compatible con esta URL

Estoy escribiendo un script y requiere obtener un desafío reCAPTCHA con una clave pública específica, así que pensé que si abría esto con urllib2:

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

Luego podría obtener el desafío desde allí y devolverlo, pero cuando lo hace, aparece el error:

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

¿Como puedo resolver esto?

preguntado el 12 de junio de 12 a las 16:06

1 Respuestas

Use una solicitud GET en su lugar:

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

A este tenor, urllib2 documentación establece lo siguiente:

data puede ser una cadena que especifica datos adicionales para enviar al servidor, o None si no se necesitan dichos datos. Actualmente, las solicitudes HTTP son las únicas que usan datos; la solicitud HTTP será POST en lugar de GET cuando se proporcione el parámetro de datos.

estabas de paso chp como datos POST pasándolos al urlopen método como el segundo argumento posicional. Concatenándolo a la URL con un ? en cambio, lo convierte en una solicitud GET.

Respondido el 12 de junio de 12 a las 16:06

Al imprimir eso, todo lo que obtengo es el parámetro de la URL: k=thekey - user1447941

¿Al imprimir qué? ¿El valor de retorno de Google? ¿Eso no significa que Google te dio una respuesta y las cosas funcionaron? - Martijn Pieters

Al imprimir chg, todo lo que imprime es el parámetro que le di (k), un signo igual y la clave pública (key), no la respuesta de Google. - user1447941

Intente dar mejores nombres a sus variables; params y response por ejemplo, creo que tienes algo mezclado. - Martijn Pieters

Oh, sí, accidentalmente imprimí chp en lugar de chg. Tenía un poco de prisa, así que nunca les di mejores nombres. ¡Gracias por la respuesta! - user1447941

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.