2013-02-10 12 views
8

Sto provando a usare Instapaper's simple developer api per aggiungere un url ai miei segnalibri usando python e la libreria delle richieste. Per autenticare il nome utente e la password tutto funziona bene.Python richiede la libreria HTTPBasicAuth con tre parametri

import requests 
from requests.auth import HTTPBasicAuth 
requests.get('https://www.instapaper.com/api/authenticate', auth=HTTPBasicAuth('username', 'password')) 

Ma quando si cerca di utilizzare l'API per aggiungere un segnalibro:

requests.get('https://www.instapaper.com/api/add', auth=HTTPBasicAuth('username', 'password','websiteUrl')) 

ottengo l'errore:

File "instantbookmark.py", line 3, in <module> 
    getA = requests.get('https://www.instapaper.com/api/add',  auth=HTTPBasicAuth('username', 'password','websiteUrl')) 
TypeError: __init__() takes exactly 3 arguments (4 given) 

Penso che questo sia perché HttpBasicAuth non può prendere un terzo argomento Qualcuno conosce un modo per farlo?

+0

Questo è l'errore di traceback completo – Wilberto

+0

Sì, ho controllato l'origine delle richieste e la documentazione dell'API, vedere la mia risposta di seguito. –

risposta

7

HTTPBasicAuth() solo sempre accetta gli argomenti nome utente e password. Non c'è il terzo argomento, punto e basta.

L'autenticazione di base HTTP aggiunge un'ulteriore intestazione alla richiesta; questa informazione è tenuta separata dai parametri GET o POST. Quando si utilizza questa forma di autenticazione, non è necessario passare alcun parametro username e password ai metodi API.

Per aggiungere un segnalibro, passare nel parametro url come POST o GET parametro data:

requests.post('https://www.instapaper.com/api/add', data={'url': 'websiteUrl'}, auth=HTTPBasicAuth('username', 'password')) 

Sia requests.get() o requests.post() farà.

Problemi correlati