Appeler l'API GitHub à partir de l'API Socket de Java, partie 2

Au début

Il s'agit d'une continuation de l'API Call Rest de GitHub à partir de l'API Java Socket. Essayez d'appeler l'API GitHub, qui valide les fichiers dans le référentiel pour GitHub, à partir de l'API Soceket de Java.

Notes de mise en œuvre

1. Que faire avant d'implémenter la logique Java

Afin d'apporter des modifications au référentiel GitHub, nous devons prendre en compte l'authentification lors de l'appel de l'API GitHub. Cette fois, nous émettrons un jeton d'accès personnel sur GitHub à l'avance pour nous authentifier avec l'authentification OAuth2. (Des informations détaillées sur la façon d'émettre un jeton d'accès personnel peuvent être trouvées sur le site de référence ci-dessous.)

2. À propos de la logique Java

Points ajoutés depuis l'implémentation précédente

Le traitement suivant a été ajouté à partir de Dernière implémentation.

Remarques sur les résultats d'exécution

Site de référence

La source

Test.java


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Base64;
import java.util.LinkedHashMap;
import java.util.Map;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.X509TrustManager;


import com.fasterxml.jackson.databind.ObjectMapper;


public class Test {
	//Ajouter des fichiers au référentiel de GitHub à l'aide de l'API REST v3 de GitHub
	//Le format de l'API REST v3 est
	// /repos/:owner/:repo/contents/:path
	//Devient
	private static final String ACCESS_KEY ="*********";
	private static final String GITHUB_RESTAPI_PATH = "https://api.github.com/repos/triple4649/images/contents/img/mypicture.png?access_token=%s";
	public static void main(String[] args) throws Exception {

		HttpsURLConnection con = createHttpsURLConnection(String.format(GITHUB_RESTAPI_PATH, ACCESS_KEY)
				,"PUT");

		//Validez le fichier image sur GitHub avec l'API Rest
		putContents(con,createJson());
		//Sortir les informations d'en-tête de la réponse de l'API Rest
		printHeaderFields(con);
		//Sortir le résultat de la réponse de l'API Rest
		printBody(con);
		con.disconnect();
	}
	
	//Écrire JSON dans le flux
	private static void putContents(HttpsURLConnection con,byte[] b) throws Exception{
		con.setDoOutput(true);
		OutputStream o = con.getOutputStream();
		o.write(b);
		o.flush();
	}
	
	//Convertit un fichier avec le chemin spécifié au format Base64
	public static String converToBase64(String path)throws Exception{
		return Base64.getEncoder()
				.encodeToString(
						Files.readAllBytes(Paths.get(path)));
	}
	
	//Générer HttpsURLConnection en spécifiant la méthode d'envoi HTTP
	private static HttpsURLConnection  createHttpsURLConnection (String path,String method) throws Exception{
		HttpsURLConnection con = createHttpsURLConnection (path);
		con.setRequestMethod(method);
		return con;
	}
	
	
	//Générer des données pour s'engager sur GitHub
	private static byte[] createJson() throws Exception{
		Map <String,Object> map = new LinkedHashMap<String,Object>();
		Map <String,String> nestmap=new LinkedHashMap<String,String>();
		nestmap.put("name", "triple");
		nestmap.put("email", "[email protected]");
		map.put("committer",nestmap);
		map.put("message","GitHub API");
		map.put("content",converToBase64("./CA390046.JPG"));
		return new ObjectMapper()
		.writeValueAsBytes(map);
	}
	
	
	//Générer URLConnection pour la connexion TLS(Version non vérifiée de la certification)
	//La méthode de demande est la méthode par défaut(Get)
	private static HttpsURLConnection  createHttpsURLConnection (String path) throws Exception{
		SSLSocketFactory factory = null;
		SSLContext ctx = SSLContext.getInstance("TLS");
		ctx.init(null, new NonAuthentication[] { new NonAuthentication() },
				null);
		factory = ctx.getSocketFactory();

		URL url = new URL(path);
		HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
		con.setSSLSocketFactory(factory);
		return con;
	}
	
	//Informations d'en-tête de sortie
	private static void printHeaderFields(HttpsURLConnection con){
		con.getHeaderFields()
		.entrySet()
		.stream()
		.map(e->String.format("key:%s value:%s", e.getKey(),e.getValue()))
		.forEach(System.out::println);
	}
	
	//Informations sur le corps de sortie
	private static void printBody(HttpsURLConnection con) throws Exception{
		new BufferedReader(new InputStreamReader(
				con.getInputStream()))
		.lines()
		.forEach(System.out::println);

	}
}

class NonAuthentication implements X509TrustManager {
	@Override
	public void checkClientTrusted(X509Certificate[] chain, String authType)
			throws CertificateException {
	}

	@Override
	public void checkServerTrusted(X509Certificate[] chain, String authType)
			throws CertificateException {
	}

	@Override
	public X509Certificate[] getAcceptedIssuers() {
		return null;
	}
}

Recommended Posts

Appeler l'API GitHub à partir de l'API Socket de Java, partie 2
Appelez l'API Java de TensorFlow depuis Scala
Appelez l'API Rest de GitHub à partir de l'API Socket de Java
Appeler Java depuis JRuby
Appeler la classe scellée de Kotlin depuis Java
Appeler l'API [Appel]
Traitement des données à l'aide de l'API de flux de Java 8
Appeler la bibliothèque Java à partir de C avec JNI
Intégration API de Java avec Jersey Client
Appel de méthodes Java à partir de JavaScript exécutées en Java
Appelez l'API de notification Windows en Java
Accédez à l'API REST Salesforce depuis Java
Introduction à Java à partir de 0 Partie 1
Appelez l'API Microsoft Emotion en envoyant des données d'image directement depuis Java.
Appeler l'API [Préparation]
[Android] Appeler la méthode d'argument par défaut de Kotlin depuis Java
Appel de méthode Java depuis RPG (appel de méthode dans sa propre classe)
Appeler l'API [Handling]
API Java Stream
java pratique partie 1
Appelez l'API Amazon Product Advertising 5.0 (PA-API v5) en Java
Appeler une méthode avec le bloc de rappel de Kotlin depuis Java
Résumé de l'API de communication Java (1) Comment utiliser Socket
Appeler un programme écrit en Swift depuis Processing (Java)
Apprentissage rapide de Java "Introduction?" Partie 3 Parler de programmation
Appeler l'API [Core Edition]
Emballez la réponse de l'API (java)
[Java] API / carte de flux
Évaluer la source Java à partir de Java
Dépannage de l'API Java Docker-Client
Accédez à API.AI depuis Java
Pratique de l'API Java8 Stream
De Java à Ruby !!
API Zabbix en Java
Étudier Java ~ Partie 8 ~ Cast
Traitement des appels du constructeur JAVA
Cloud9 (Rails) de Github
Ce chat de Metadata Co., Ltd. Appelle l'API cat en Java.
JSON en Java et Jackson Partie 1 Renvoyer JSON à partir du serveur
Implémentez l'interface Java dans la classe JRuby et appelez-la depuis Java
Comment appeler et utiliser l'API en Java (Spring Boot)
[Kotlin] Obtenez le constructeur / la méthode Java de KFunction et appelez-le