password form example data auth curl credentials

form - login curl php



¿Usando cURL con un nombre de usuario y contraseña? (13)

Bastante fácil, haz lo siguiente:

curl -X GET/POST/PUT <URL> -u username:password

Quiero acceder a una URL que requiere un nombre de usuario / contraseña. Me gustaría intentar acceder a ella con curl. Ahora mismo estoy haciendo algo como:

curl http://api.somesite.com/test/blah?something=123

Me sale un error. Supongo que necesito especificar un nombre de usuario y contraseña junto con el comando anterior.

¿Cómo puedo hacer eso?


Es más seguro hacer:

curl --netrc-file my-password-file http://example.com

... como pasar una cadena simple de usuario / contraseña en la línea de comandos es una mala idea.

El formato del archivo de contraseña es (según el man curl ):

machine <example.com> login <username> password <password>

(Las palabras " machine ", " login de login " y " password " son solo palabras clave; la información real es la materia después de esas palabras clave).


O lo mismo pero diferente sintaxis.

curl http://username:[email protected]/test/blah?something=123


Otras respuestas han sugerido netrc para especificar el nombre de usuario y la contraseña, de acuerdo con lo que he leído, estoy de acuerdo. Aquí hay algunos detalles de sintaxis:

https://ec.haxx.se/usingcurl-netrc.html

Al igual que otras respuestas, me gustaría subrayar la necesidad de prestar atención a la seguridad con respecto a esta pregunta.

Aunque no soy un experto, encontré estos enlaces profundos:

https://ec.haxx.se/cmdline-passwords.html

Para resumir:

El uso de las versiones cifradas de los protocolos (HTTPS vs HTTP) (FTPS vs FTP) puede ayudar a evitar la pérdida de la red.

El uso de netrc puede ayudar a evitar la fuga de la línea de comandos.

Para ir un paso más allá, parece que también puedes cifrar los archivos netrc usando gpg

https://brandur.org/fragments/gpg-curl

Con esto, sus credenciales no están "en reposo" (almacenadas) como texto sin formato.


Para pasar la contraseña de forma segura en un script (es decir, evitar que se muestre con ps auxf o logs), puede hacerlo con el indicador -K- (lea la configuración de stdin) y un heredoc:

curl --url url -K- <<< "--user user:password"


Para permitir que la contraseña no aparezca en tu .bash_history :

curl -u user:$(cat .password-file) http://example-domain.tld



Si se encuentra en un sistema que tiene la aplicación Gnome keyring, una solución que evita exponer la contraseña directamente es utilizar gkeyring.py para extraer la contraseña del conjunto de claves:

server=server.example.com file=path/to/my/file user=my_user_name pass=$(gkeyring.py -k login -tnetwork -p user=$user,server=$server -1) curl -u $user:$pass ftps://$server/$file -O


Simple y simple, la forma más segura sería utilizar variables de entorno para almacenar / recuperar sus credenciales. Así, un comando de rizo como:

curl -Lk -XGET -u "${API_USER}:${API_HASH}" -b cookies.txt -c cookies.txt -- "http://api.somesite.com/test/blah?something=123"

Luego llamaría a su api tranquila y pasaría el encabezado http WWW_Authentication con los valores codificados en Base64 de API_USER y API_HASH . El -Lk simplemente le dice a curl que siga los redireccionamientos de http 30x y que use el manejo inseguro de tls (es decir, ignore los errores de ssl). Mientras que el doble -- es solo basta en sintaxis de azúcar para detener el procesamiento de indicadores de línea de comando. Además, las -b cookies.txt y -c cookies.txt manejan cookies con -b enviando cookies y -c almacenando cookies localmente.

El manual tiene más ejemplos de métodos de autenticación .


También puede simplemente enviar el nombre de usuario escribiendo:

curl -u USERNAME http://server.example

Curl le pedirá la contraseña y ésta no se verá en la pantalla (o si necesita copiar / pegar el comando).


Tenía la misma necesidad en bash (Ubuntu 16.04 LTS) y los comandos proporcionados en las respuestas no funcionaron en mi caso. Tuve que usar:

curl -X POST -F ''username="$USER"'' -F ''password="$PASS"'' "http://api.somesite.com/test/blah?something=123"

Las comillas dobles en los argumentos -F solo son necesarias si está usando variables, por lo tanto, desde la línea de comandos ... -F ''username=myuser'' ... estará bien.

Me alegraría si un comentario o edición puede explicar por qué!


Use la -u para incluir un nombre de usuario, y curl le pedirá una contraseña:

curl -u username http://example.com

También puede incluir la contraseña en el comando, pero su contraseña será visible en el historial de bash:

curl -u username:password http://example.com


curl -X GET -u username:password {{ http://www.example.com/filename.txt }} -O