API de GitHub para crear un archivo

3 minutos de lectura

avatar de usuario
neil

Así que estoy tratando de familiarizarme con la API de GitHub. Estoy usando comandos cURL para implementar algunas de sus funciones básicas. Puedo obtener la autorización básica y la creación del repositorio correctamente. Actualmente, estoy tratando de crear un archivo en un repositorio usando su API y me encuentro con el error “mensaje”: “No encontrado” como respuesta.

Sus documentación sugiere esto:

PUT /repos/:owner/:repo/contents/:path

Se me ocurrió esto como el equivalente cURL:

curl -H 'Authorization: <token>' -d '{"path": "test.txt", "message": "Initial Commit", "committer": {"name": "<name>", "email": "<email>"}, "content": "bXkgbmV3IGZpbGUgY29udGVudHM=", "note":"Test Commit"}' https://api.github.com/repos/InViN-test/test_repo1/contents/test.txt

Creo que el problema está en la URL de la API que estoy usando al final, pero parece que no puedo descifrar cómo debería verse la URL.

Esto es lo que usé para crear un repositorio:

curl -i -H 'Authorization: <token>' -d '{"name": "test_repo1", "message": "Initial Commit", "committer": {"name": "<name>", "email": "<email>"}, "content": "bXkgbmV3IGZpbGUgY29udGVudHM=", "note":"Test Commit"}' https://api.github.com/user/repos

La URL de creación del repositorio que utilicé es la siguiente: usuario/repos como sintaxis. Del mismo modo, intenté usar user/repos/repo, pero no funcionó.

¿Alguien puede aclarar esto?

He revisado varias preguntas de StackOverflow y muchas parecen similares, pero ninguna realmente ofrece un ejemplo para que pueda descubrir dónde está el error.

EDITAR: Gracias a TimWolla por la respuesta.

Sintaxis de un comando de trabajo para crear un archivo en un repositorio utilizando la API de GitHub:

curl -i -X PUT -H 'Authorization: token <token_string>' -d '{"path": "<filename.extension>", "message": "<Commit Message>", "committer": {"name": "<Name>", "email": "<E-Mail>"}, "content": "<Base64 Encoded>", "branch": "master"}' https://api.github.com/repos/<owner>/<repository>/contents/<filename.extension>

mi ejemplo:

curl -i -X PUT -H 'Authorization: token f94ce61613d5613a23770b324521b63d202d5645' -d '{"path": "test4.txt", "message": "Initial Commit", "committer": {"name": "Neil", "email": "neil@abc.com"}, "content": "bXkgbmV3IGZpbGUgY29udGVudHM=", "branch": "master"}' https://api.github.com/repos/InViN-test/test_repo1/contents/test4.txt

  • Tuve el mismo problema (404 al intentar crear un archivo, mientras que la lectura de archivos no fue ningún problema) y en mi caso, la solución fue que el token de acceso personal necesitaba tener “admin:repo_hooks” en sus ámbitos (además de usuarios y repositorios). Me tomó algún tiempo descubrir esto.

    – Martín Roob

    20 de febrero de 2019 a las 6:27

Cuando usas curl debe especificar el verbo HTTP correcto (PUT en este caso) usando el -X opción:

curl -X PUT -H 'Authorization: …' yadayada

También usando su carga útil de ejemplo, apareció un error 500, esta carga útil acortada funcionó bien:

{"message": "Initial Commit","content": "bXkgbmV3IGZpbGUgY29udGVudHM="}

Sin embargo, no sé el motivo real del error del servidor.

  • TimWolla, ¿cuál es la URL real que usaste para el comando PUT?

    – Neil

    11 de marzo de 2014 a las 1:42

  • @Neil Lo mismo que hiciste, excepto por un repositorio mío: https://api.github.com/repos/user/repo/contents/so-test.txt

    – TimWolla

    11 de marzo de 2014 a las 1:49

  • ¿Puedes pegar el comando completo? Sigo recibiendo un mensaje de error: “No encontrado”.

    – Neil

    11 de marzo de 2014 a las 3:06


  • @Neil Claro: curl -X PUT -H 'Authorization: token yadayada' -d '{"message": "Initial Commit","content": "bXkgbmV3IGZpbGUgY29udGVudHM="}' https://api.github.com/repos/user/test/contents/so-test.txt

    – TimWolla

    11 de marzo de 2014 a las 3:20

  • Tim, gracias! Funciona como se esperaba ahora. Estoy usando el siguiente comando: curl -i -X PUT -H 'Authorization: <token>' -d '{"path": "test4.txt", "message": "Initial Commit", "committer": {"name": "<name>", "email": "<email>"}, "content": "bXkgbmV3IGZpbGUgY29udGVudHM=", "branch": "master"}' https://api.github.com/repos/InViN-test/test_repo1/contents/test4.txt

    – Neil

    11 de marzo de 2014 a las 3:32


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad