Solicitud no válida en Google API de búsqueda segura de navegación
-
27-10-2019 - |
Pregunta
Estoy tratando de enviar una solicitud a la API de búsqueda de navegación de Google Safe. Le pide al usuario una URL para la cual quiere hacer la mirada. Sin embargo, hay algún problema con la forma en que envío la solicitud porque sigue respondiendo con el código de error 400. Ayuda amable.
import urllib
import urllib2
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.api import urlfetch
req_url = "https://sb-ssl.google.com/safebrowsing/api/lookup"
class MainHandler(webapp.RequestHandler):
def get(self):
self.response.out.write("""<html>
<body>
<form action='' method='POST'>
<input type='text' name='url'>
<input type='submit' value='submit!!'>
</form>
</body>
</html>""")
def post(self):
post_data = {'client':'api',
'apikey':'My-API-Key',
'appver':'1.5.2',
'pver':'3.0',
'url':"%s"% self.request.get('url') }
data = urllib.urlencode(post_data)
try:
req = urlfetch.fetch(url = req_url,
payload = data,
method = urlfetch.POST,
headers = {'Content-Type': 'application/x-www-form-urlencoded'})
if req.status_code == '200':
self.response.out.write("success")
self.response.out.write(req.content)
else:
self.response.out.write("Error code %s!!!"% req.status_code)
except urllib2.URLError, e:
self.response.out.write("Exception Raised")
handleError(e)
def main():
application = webapp.WSGIApplication([
('/', MainHandler)
],debug=True)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
Solución
Parece que no está siguiendo el protocolo para el método Get o Post, pero está haciendo algo entre pasando lo que debería ser los parámetros GET a través de la publicación.
Prueba este método:
import urllib
from google.appengine.api import urlfetch
def safe_browsing(url):
"""Returns True if url is safe or False is it is suspect"""
params = urllib.urlencode({
'client':'api',
'apikey':'yourkey',
'appver':'1.5.2',
'pver':'3.0',
'url': url })
url = "https://sb-ssl.google.com/safebrowsing/api/lookup?%s" % params
res = urlfetch.fetch(url, method=urlfetch.GET)
if res.status_code >= 400:
raise Exception("Status: %s" % res.status_code)
return res.status_code == 204
Que funcionaría como:
>>> safe_browsing('http://www.yahoo.com/')
True
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow