Remarques sur la communication HTTP avec Java (OkHttp)

Objectif

-Je souhaite communiquer avec une API externe via HTTP à partir du processus implémenté en Java. ・ Je veux mettre du XML dans le corps ・ J'aime quelque chose d'aussi simple que possible à mettre en œuvre.

Client HTTP Java ... que dois-je utiliser?

Reportez-vous à l'article sur le net, OkHttp(https://square.github.io/okhttp/) J'ai utilisé une bibliothèque appelée.

<!-- http client -->
<dependency>
  <groupId>com.squareup.okhttp3</groupId>
  <artifactId>okhttp</artifactId>
  <version>3.7.0</version>
</dependency>

la mise en oeuvre

Dans l'exemple, XML est emballé dans le corps et l'API est appelée. Reçoit la chaîne XML renvoyée par l'API et la renvoie.

public String callSomething(String xml) throws IOException {
    return new OkHttpClient().newCall(
                new Request.Builder()
                    .url("[URL de communication]")
                    // basic authentication
                    .header("Authorization",
                            Credentials.basic(
                                    "[Utilisateur d'authentification de base]",
                                    "[Mot de passe d'authentification de base]"))
                    .post(RequestBody.create(MediaType.parse("text/xml"), xml))
                    .build()
            ).execute()
            .body()
            .string();
}

référence

Quel est le meilleur client HTTP pour Java? https://qiita.com/alt_yamamoto/items/0d72276c80589493ceb4

Postscript (13/08/2019)

・ Il n'est pas bon de faire du neuf à chaque fois ・ Il est nécessaire de régler le délai d'expiration de manière appropriée en fonction de l'environnement. Je l'ai corrigé en fonction de ce point.

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class MyService {

    private OkHttpClient client;

    @PostConstruct
    public void init() {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.connectTimeout(150, TimeUnit.SECONDS);
        builder.readTimeout(150, TimeUnit.SECONDS);
        builder.writeTimeout(150, TimeUnit.SECONDS);
        client = builder.build();
    }

    public String callSomething(String xml) throws IOException {
        try (Response res = client.newCall(
                new Request.Builder()
                    .url("[URL de communication]")
                    .header("Authorization",
                        Credentials.basic(
                            "[Utilisateur d'authentification de base]",
                            "[Mot de passe d'authentification de base]"))
                    .post(RequestBody.create(MediaType.parse("text/xml"), xml))
                .build()).execute()) {
            return res.body().string();
        }
    }
}

Recommended Posts

Remarques sur la communication HTTP avec Java (OkHttp)
[Java] Communication JSON avec jackson
[Note] Concernant la communication http (okhttp3)
Erreur lors de la lecture avec java
Mémo d'étude Java 2 avec Progate
J'ai essayé la communication UDP avec Java
Essayez la communication bidirectionnelle avec gRPC Java
Mémo Java
Lors de l'appel de l'API avec java, javax.net.ssl.SSLHandshakeException se produit
[Java] Précautions lors de la comparaison de chaînes de caractères avec des chaînes de caractères
java quoi que ce soit mémo
Mémo Java Silver
Communication HTTP / HTTPS
Spécifiez ClassPath lors de l'utilisation de jupyter + Java avec WSL
Remarque sur Java SE 7
java n'importe quoi mémo 2
Mémo de spécification Java
Mémo de modèle Java
[Java] Considérations lors de la gestion des nombres binaires négatifs avec Integer.parseInt ()
[Java] Comment obtenir une requête par communication HTTP
Remarquez un problème multi-thread lorsque vous travaillez avec Java Servlet
Mémo d'apprentissage lors de l'apprentissage de Java pour la première fois (mémo d'apprentissage personnel)
Installez java avec Homebrew
Mémo de l'environnement de développement Java
Changer de siège avec Java
Installez Java avec Ansible
mémo de connaissances de base java
Mémo d'apprentissage Java (méthode)
Mémo Java Kuche Day
Téléchargement confortable avec JAVA
java se 8 programmeur Ⅰ mémo
Mémo privé payant Java
[OkHttp] REST-API Java SSL
Changer java avec direnv
Mémo d'apprentissage Java (basique)
mémo d'expression java lambda
Principes de base du réseau Java (communication)
(Mémo) Java pour instruction
Téléchargement Java avec Ansible
expression lambda java [écriture de notes]
Raclons avec Java! !!
Mémo d'apprentissage Java (interface)
[Java] Mémo d'héritage implicite
Construire Java avec Wercker
Mémo d'apprentissage Java (héritage)
mémo de programmation du concours java
[Mémo] Liste liée Java
Conversion Endian avec JAVA
Méthode de configuration initiale lors de la création d'Alexa Skill avec JAVA (Cloud 9)
Communication socket avec un navigateur Web utilisant Java et JavaScript ②
À propos du comportement lors de la création d'un mappage de fichiers avec Java
Communication socket avec un navigateur Web utilisant Java et JavaScript ①
Un mémo pour démarrer la programmation Java avec VS Code (version 2020-04)
Un mémo lors du passage de Ruby Silver avec un manuel officiel