Eine Geschichte über die Verwendung einer HTTP-Ablaufverfolgung mit Charles, um herauszufinden, welche Anforderungen die Java-Bibliothek an Slack stellt

Überblick

Ältere Java-Anwendungen verwendeten Slack-API zur Benachrichtigung, aber Anfang März 2020 schlug die Benachrichtigung fehl. Zur Fehlerbehebung auf meinem Mac wollte ich die Nutzlast einer Anfrage sehen, die nicht benachrichtigt werden konnte. Ich habe versucht, mit Fiddler eine Spur zu erstellen, aber es ist nicht angekommen, also [Charles](https: //www.charlesproxy). Com /) verwenden. Wenn Sie in curl unter Bezugnahme auf hier den Proxy für localhost: 8888 mit -x angeben, können Sie das Protokoll mit Chales abrufen. ..

.sh


curl -x localhost:8888 -X POST --data-urlencode "payload={\"channel\": \"#general\", \"username\": \"gpedro Bot\", \"text\": \"das ist#Gepostet im Allgemeinen.\", \"icon_emoji\": \":ghost:\"}" https://hooks.slack.com/services/<YOUR>/<TOKEN>

Bei Java-Anwendungen war ich mir nicht ganz sicher, wie ich HTTP-Traces mit Charles aufnehmen sollte, und entschied mich daher, dies zu untersuchen.

Weise

Meine Anwendung hat [diese Bibliothek] verwendet (https://github.com/gpedro/slack-webhook). Es ist seit langer Zeit unberührt geblieben und scheint geringfügig zu sein. Ich denke, dass die Leute, die diesen Artikel lesen, diese Bibliothek definitiv nicht nutzen. Durch Implementieren der Proxy-Klasse oder gleichwertiger Einstellungen kann jedoch eine Form erstellt werden Ich vermute, dass es in jeder Bibliothek eine Möglichkeit gibt, HTTP-Anfragen über Proxy zu senden. [^ 1] Auch wenn Sie diese Bibliothek verwenden, anstatt eine Instanz zu erstellen, die standardmäßig die API aufruft, Proxy-Klasse Ich konnte eine Instanz durch Angabe von (/reflect/Proxy.html) erstellen. Als ich auf diese Weise eine Instanz erstellte, konnte ich mit Charles eine HTTP-Ablaufverfolgung von Anforderungen für diese Bibliothek erstellen. Wenn Sie Fehler in der Bibliothek beheben möchten, hoffe ich, dass dies in irgendeiner Weise hilfreich ist.

Charles installieren

Installieren Sie unter Bezugnahme auf diesen Artikel. Vertrauen Sie dem Zertifikat Charles Proxy .... im Schlüsselbund.

Charles-Zertifikat exportieren

Klicken Sie im Schlüsselbund mit der rechten Maustaste auf das Charles Proxy ... -Zertifikat und wählen Sie Exportieren-> Charles Proxy-CA exportieren, um das Zertifikat zu exportieren. Der Name des Zertifikats enthält viele Escape-Zeichen. Ändern Sie den Namen daher bei Bedarf in einen einfachen Namen.

Zertifikat in JDK-Bibliothek importieren

Import gemäß diesem Artikel. In meinem Fall habe ich AWS Corretto 8 verwendet, daher habe ich es unten importiert. Das Passwort war wie im obigen Artikel.

.sh


sudo keytool -import -trustcacerts -file ~/Documents/charles_proxy.cer  -keystore /Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home/jre/lib/security/cacerts -alias ca

Anfrage durch Angabe von Proxy

Geben Sie wie bei Curl den Charles-Port 8888 an, um die Anforderung zu stellen. In dieser Bibliothek

import net.gpedro.integrations.slack.SlackApi;
import net.gpedro.integrations.slack.SlackMessage;

import java.net.InetSocketAddress;
import java.net.Proxy;

public class SlackExecute {

    public static void main(String[] args) {

        SlackMessage slackMessage = new SlackMessage(
                "#genearal",
                "gpedro Bot",
                "Kann ich mit gpedro eine Slack-Anfrage stellen?"
        );
        slackMessage.setIcon(":ghost:");
        SlackApi api = new SlackApi(
                "https://hooks.slack.com/services/<SOME>/<TOKEN>", 
                new Proxy(
                    Proxy.Type.HTTP,
                    new InetSocketAddress("localhost", 8888)
                )
         );
        api.call(slackMessage);
    }
}

Starten Sie Charles und führen Sie die Anwendung aus

Jetzt wird im linken Bereich von Charles https://hooks.slack.com angezeigt und Sie können den Inhalt verfolgen.

.json


{
    "channel": "#genearal",
    "username": "gpedro Bot",
    "icon_emoji": ":ghost:",
    "unfurl_media": false,
    "unfurl_links": false,
    "link_names": false,
    "text": "Kann ich mit gpedro anfordern"
}

[^ 1]: Stellen Sie beispielsweise eine Anfrage an Spring 5 WebClient Interface. WebClient.html) und geben Sie den Proxy in [diesem Artikel] an (https://stackoverflow.com/questions/46979982/how-can-i-support-an-http-proxy-using-spring-5-webclient). Wie es geht, wird beschrieben. Für diese Klasse die WebClient.Builder # clientConnector-Methode. Es gibt HTML # clientConnector-org.springframework.http.client.reactive.ClientHttpConnector-). Das Argument für diese Methode kann die ClientHttpConnector-Klasse sein (https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/reactive/ClientHttpConnector.html). .. [Konstruktor](https: /) von ReactorClientHttpConnector dieser Implementierungsklasse /docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/reactive/ReactorClientHttpConnector.html#ReactorClientHttpConnector-reactor.netty.http.client.HttpClient-) (https://projectreactor.io/docs/netty/release/api/reactor/netty/http/client/HttpClient.html) kann angegeben werden. TcpConfiguration-Methode von HttpClient release / api / reactor / netty / http / client / HttpClient.html # tcpConfiguration-java.util.function.Function-) ist die TcpClient-Klasse. TcpClient-Klasse mit einer Funktion, die Reactor / netty / tcp / TcpClient.html als Argument verwendet Die Proxy-Methode lautet ProxyProvider.TypeSpec. verwendet eine Funktion als Argument. ProxyProvider.TypeSpec-Schnittstellentypmethode, Setzen Sie den Proxy-Typ auf ProxyProvider.TypeSpec-Schnittstellentypmethode. Bei der Implementierung von ProxyProvider.AddressSpec des Rückgabewerts von netty.tcp.ProxyProvider.Proxy-) , Host oder InetSocketAddress-Klasse kann angegeben werden. Die Proxy-Klasse (https://docs.oracle.com/javase/jp/8/docs/api/java/lang/reflect/Proxy.html) wird nicht verwendet, aber das Gleiche wird getan.

Recommended Posts

Eine Geschichte über die Verwendung einer HTTP-Ablaufverfolgung mit Charles, um herauszufinden, welche Anforderungen die Java-Bibliothek an Slack stellt
Eine Geschichte über die Herstellung eines Taschenrechners zur Berechnung der Muschelhügelrate
So finden Sie heraus, welche Java-Version der Klassendatei kompiliert wurde
[Java small story] Überwachen Sie, wann der Liste ein Wert hinzugefügt wird
Versuchen Sie, mit Scala mithilfe der Standardbibliothek von Java Text zu einem Bild hinzuzufügen
Androd: Was tun gegen "The Realm befindet sich bereits in einer Schreibtransaktion in"
Eine Geschichte über das JDK in der Java 11-Ära
Eine Geschichte über das Erstellen eines Builders, der den Builder erbt
Die Geschichte des Versuchs, JAVA File zu bedienen
Ich habe versucht herauszufinden, was sich in Java 9 geändert hat
Ich möchte herausfinden, welche Java-Version die JAR-Datei hat, die ich habe
Was benötigen Sie am Ende, um eine Web-App mit Java zu erstellen? Erklären Sie den Mechanismus und was zum Lernen notwendig ist