en rizo hago esto:código Python como rizo
curl -u email:password http://api.foursquare.com/v1/venue.json?vid=2393749
¿Cómo puedo hacer esto mismo en Python?
en rizo hago esto:código Python como rizo
curl -u email:password http://api.foursquare.com/v1/venue.json?vid=2393749
¿Cómo puedo hacer esto mismo en Python?
"El problema podría ser que las bibliotecas de Python, por HTTP estándar, enviar primero una solicitud no autenticado, y sólo si se respondió con un reintento 401, se envían las credenciales correctas Si. los servidores de Foursquare no hacen "totalmente autenticación estándar", entonces las bibliotecas no funcionarán
Trate de usar cabeceras para realizar la autenticación:".
tomando desde Python urllib2 Basic Auth Problem
import urllib2
import base64
req = urllib2.Request('http://api.foursquare.com/v1/venue.json?vid=%s' % self.venue_id)
req.add_header('Authorization: Basic ',base64.b64encode('email:password'))
res = urllib2.urlopen(req)
Uso pycurl
Hay una discusión sobre SO tutoriales
un ejemplo típico:
import sys
import pycurl
class ContentCallback:
def __init__(self):
self.contents = ''
def content_callback(self, buf):
self.contents = self.contents + buf
t = ContentCallback()
curlObj = pycurl.Curl()
curlObj.setopt(curlObj.URL, 'http://www.google.com')
curlObj.setopt(curlObj.WRITEFUNCTION, t.content_callback)
curlObj.perform()
curlObj.close()
print t.contents
Puede usar 'pycurl', pero no es obligatorio. Es bastante posible usar la biblioteca estándar. Vea la pregunta que he vinculado anteriormente. –
Aquí es el equivalente en pycurl:
import pycurl
from StringIO import StringIO
response_buffer = StringIO()
curl = pycurl.Curl()
curl.setopt(curl.URL, "http://api.foursquare.com/v1/venue.json?vid=2393749")
curl.setopt(curl.USERPWD, '%s:%s' % ('youruser', 'yourpassword'))
curl.setopt(curl.WRITEFUNCTION, response_buffer.write)
curl.perform()
curl.close()
response_value = response_buffer.getvalue()
estoy más cómodo correr el rizo línea de comandos a través de subproceso. Esto evita todos los dolores de cabeza posibles de coincidencia de versión de python, pycurl y libcurl. La observación de que pycurl no se ha tocado en 2 años, y solo aparece como compatible a través de Python 2.5, me hizo desconfiar. - John
import subprocess
def curl(*args):
curl_path = '/usr/bin/curl'
curl_list = [curl_path]
for arg in args:
curl_list.append(arg)
curl_result = subprocess.Popen(
curl_list,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE).communicate()[0]
return curl_result
answer = curl('-u', 'email:password', 'http://api.foursquare.com/v1/venue.json?vid=2393749')
si el uso human_curl puede escribir algún código
human_curl importación como lanzan
r = hurl.get('http://api.foursquare.com/v1/venue.json?vid=2393749', auth=('email','password'))
datos JSON en r.content
Ver [Python urllib2 autenticación básica Problema ] (http: // stackoverflow .com/questions/2407126/python-urllib2-basic-auth-problem), que trata de usar Basic Auth con Foursquare en Python. –