Ä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.
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.
Installieren Sie unter Bezugnahme auf diesen Artikel. Vertrauen Sie dem Zertifikat Charles Proxy .... im Schlüsselbund.
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.
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
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);
}
}
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