Este repositorio contiene mis notas y descubrimientos mientras la aplicación de hilos de ingeniería inversa. Siéntase libre de PR si ha encontrado algo nuevo, o crea clientes con esta información (con crédito OFC).
La versión web de Threads es actualmente de solo solo lectura, por lo que no se puede aprender mucho sobre la autenticación o la publicación. Utiliza el cliente Relay GraphQL de Meta para hablar con Backend ( threads.net/api/graphql ), que parece estar configurado para no permitir consultas arbitrarias. Esto nos deja limitados a las consultas existentes que se encuentran en la fuente del frontend:
Tenga en cuenta que al consultar el backend de GraphQL, asegúrese de establecer un agente de usuario (parece que cualquier cosa funciona aquí) y establezca el encabezado
x-ig-app-iden238260118697367.
ID de Doc:
23996318473300828Variables:
userID(la ID del usuario)
curl --request POST
--url https://www.threads.net/api/graphql
--header ' user-agent: threads-client '
--header ' x-ig-app-id: 238260118697367 '
--header ' content-type: application/x-www-form-urlencoded '
--data ' variables={"userID":"314216"} '
--data doc_id=23996318473300828ID de Doc:
6232751443445612Variables:
userID(la ID del usuario)
curl --request POST
--url https://www.threads.net/api/graphql
--header ' user-agent: threads-client '
--header ' x-ig-app-id: 238260118697367 '
--header ' content-type: application/x-www-form-urlencoded '
--data ' variables={"userID":"314216"} '
--data doc_id=6232751443445612ID de Doc:
6307072669391286Variables:
userID(la ID del usuario)
curl --request POST
--url https://www.threads.net/api/graphql
--header ' user-agent: threads-client '
--header ' x-ig-app-id: 238260118697367 '
--header ' content-type: application/x-www-form-urlencoded '
--data ' variables={"userID":"314216"} '
--data doc_id=6307072669391286ID de Doc:
5587632691339264Variables:
postID(la identificación de la publicación)
curl --request POST
--url https://www.threads.net/api/graphql
--header ' user-agent: threads-client '
--header ' x-ig-app-id: 238260118697367 '
--header ' content-type: application/x-www-form-urlencoded '
--data ' variables={"postID":"3138977881796614961"} '
--data doc_id=5587632691339264ID de Doc:
9360915773983802Variables:
mediaID(la identificación de la publicación)
curl --request POST
--url https://www.threads.net/api/graphql
--header ' user-agent: threads-client '
--header ' x-ig-app-id: 238260118697367 '
--header ' content-type: application/x-www-form-urlencoded '
--data ' variables={"mediaID":"3138977881796614961"} '
--data doc_id=9360915773983802Advertencia Este punto final actualmente solo funciona para cuentas sin 2FA habilitado.
Las aplicaciones móviles utilizan el marco Bloks de Meta (originalmente construido para Instagram Lite) para la autenticación.
La identificación de versiones de Bloks para hilos es 00ba6fa565c3c707243ad976fa30a071a625f2a3d158d9412091176fe35027d8 . Bloks también requiere que proporcione una ID de dispositivo (de forma ios-RANDOM | android-RANDOM , siendo RANDOM un conjunto aleatorio de 13 caracteres).
curl --request POST
--url ' https://i.instagram.com/api/v1/bloks/apps/com.bloks.www.bloks.caa.login.async.send_login_request/ '
--header ' user-agent: Barcelona 289.0.0.77.109 Android '
--header ' sec-fetch-site: same-origin '
--header ' content-type: application/x-www-form-urlencoded; charset=UTF-8 '
--data ' params={"client_input_params":{"password":"$PASSWORD","contact_point":"$USERNAME","device_id":"$DEVICE_ID"},"server_params":{"credential_type":"password","device_id":"$DEVICE_ID"}} '
--data ' bloks_versioning_id=00ba6fa565c3c707243ad976fa30a071a625f2a3d158d9412091176fe35027d8 ' Esta solicitud devuelve una gran carga útil JSON. Su token será inmediatamente después del Bearer IGT:2: y debe tener 160 caracteres de largo.
curl --request POST
--url ' https://i.instagram.com/api/v1/media/configure_text_only_post/ '
--header ' content-type: application/x-www-form-urlencoded; charset=UTF-8 '
--header ' user-agent: Barcelona 289.0.0.77.109 Android '
--header ' authorization: Bearer IGT:2:$TOKEN '
--header ' sec-fetch-site: same-origin '
--data ' signed_body=SIGNATURE.{"publish_mode":"text_post","text_post_app_info":"{"reply_control":0}","timezone_offset":"0","source_type":"4","_uid":"$USER_ID","device_id":"$DEVICE_ID","caption":"$POST_TEXT","device":{"manufacturer":"OnePlus","model":"ONEPLUS+A3003","android_version":26,"android_release":"8.1.0"}} ' Threads usa el mismo sistema de identificación utilizado por Instagram. El mejor enfoque para convertir del nombre de usuario a la identificación parece ser solicitar la página de Instagram del usuario ( instagram.com/:username ) y analizar manualmente el HTML de respuesta. Para otros métodos, consulte esta pregunta de StackOverflow.