Les applications Java héritées utilisaient slack-api pour notifier, mais début mars 2020, la notification a échoué. Pour dépanner sur mon Mac, je voulais voir quelle était la charge utile d'une demande qui n'a pas été notifiée. J'ai essayé de prendre une trace en utilisant Fiddler, mais cela ne s'est pas produit, donc [Charles](https: //www.charlesproxy. Pour utiliser com /). Dans curl, en vous référant à here, si vous spécifiez le proxy de localhost: 8888 avec -x, vous pouvez obtenir le journal avec Chales. ..
.sh
curl -x localhost:8888 -X POST --data-urlencode "payload={\"channel\": \"#general\", \"username\": \"gpedro Bot\", \"text\": \"c'est#Publié en général.\", \"icon_emoji\": \":ghost:\"}" https://hooks.slack.com/services/<YOUR>/<TOKEN>
Je n'étais pas sûr de savoir comment prendre une trace Http avec Charles dans une application Java, alors j'ai décidé de l'examiner.
Mon application a utilisé cette bibliothèque. Il est resté intact pendant longtemps, et cela semble mineur, donc je pense que les personnes qui lisent cet article n'utilisent certainement pas cette bibliothèque. Cependant, en implémentant la classe Proxy ou des paramètres équivalents, une forme Je soupçonne qu'il existe un moyen d'envoyer des requêtes HTTP via Proxy dans n'importe quelle bibliothèque. [^ 1] Même lors de l'utilisation de cette bibliothèque, au lieu de créer une instance qui appelle l'API par défaut, Proxy class J'ai pu créer une instance en spécifiant (/reflect/Proxy.html). Lorsque j'ai créé une instance de cette façon, j'ai pu utiliser Charles pour prendre une trace HTTP des requêtes pour cette bibliothèque. Si vous souhaitez dépanner la bibliothèque, j'espère que cela vous sera utile.
Installez en vous référant à cet article. Faites confiance au certificat Charles Proxy .... dans le trousseau.
Dans le trousseau, cliquez avec le bouton droit sur le certificat Charles Proxy ... et sélectionnez Export-> Export Charles Proxy CA pour exporter le certificat. Le nom du certificat contient beaucoup de caractères d'échappement, alors changez le nom en quelque chose de simple si nécessaire.
Importez selon cet article. Dans mon cas, j'utilisais AWS Corretto 8, je l'ai donc importé ci-dessous. Le mot de passe était comme dans l'article ci-dessus.
.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
Comme pour curl, spécifiez le port Charles 8888 à demander. Dans cette bibliothèque
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",
"Puis-je faire une demande Slack avec gpedro?"
);
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);
}
}
Maintenant, dans le volet gauche de Charles, https://hooks.slack.com apparaîtra et vous pourrez retracer le contenu.
.json
{
"channel": "#genearal",
"username": "gpedro Bot",
"icon_emoji": ":ghost:",
"unfurl_media": false,
"unfurl_links": false,
"link_names": false,
"text": "Puis-je demander avec gpedro"
}
[^ 1]: Par exemple, faites une demande à Spring 5 [WebClient Interface](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/reactive/function/client/ WebClient.html) et spécifiez le proxy dans cet article Comment le faire est décrit. Pour cette classe, la [méthode WebClient.Builder # clientConnector](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/reactive/function/client/WebClient.Builder. Il existe le code html # clientConnector-org.springframework.http.client.reactive.ClientHttpConnector-). L'argument de cette méthode peut être la classe ClientHttpConnector (https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/reactive/ClientHttpConnector.html). .. [Constructeur](https: /) de [ReactorClientHttpConnector](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/reactive/ReactorClientHttpConnector class.html) de cette classe d'implémentation /docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/reactive/ReactorClientHttpConnector.html#ReactorClientHttpConnector-reactor.netty.http.client.HttpClient) Vous pouvez spécifier (https://projectreactor.io/docs/netty/release/api/reactor/netty/http/client/HttpClient.html). Méthode TcpConfiguration de HttpClient release / api / reacteur / netty / http / client / HttpClient.html # tcpConfiguration-java.util.function.Function-) est la [classe TcpClient](https://projectreactor.io/docs/netty/release/api/ Classe TcpClient avec une fonction qui prend reacteur / netty / tcp / TcpClient.html) comme argument La méthode proxy est ProxyProvider.TypeSpec. prend une fonction comme argument. Méthode de type d'interface ProxyProvider.TypeSpec, Définissez le type de proxy sur [Méthode de type d'interface ProxyProvider.TypeSpec](https://projectreactor.io/docs/netty/release/api/reactor/netty/tcp/ProxyProvider.TypeSpec.html#type-reactor. Dans l'implémentation de ProxyProvider.AddressSpec de la valeur de retour de netty.tcp.ProxyProvider.Proxy-) , Host ou InetSocketAddress class peut être spécifié. Il n'utilise pas la classe Proxy (https://docs.oracle.com/javase/jp/8/docs/api/java/lang/reflect/Proxy.html), mais il fait la même chose.
Recommended Posts