问题简介
由于之前一直用7之前的版本,es一直在本地裸奔,不用考虑安全问题。自从把集群放到服务器上了就升级了一下7.7,并且配置了xpack,
访问的链接就要变化了。不能直接get请求http://ip:port/index/type/id 的url数据了
一开始以为传两个参数模拟一下post请求就可以了,但是研究一番,发现事情并没有那么简单。
解决思路
- 官网上提供了curl携带用户名密码的访问方式
- 把curl请求转为http请求不就完事了
例如官网给出的bulk 文件的URL中:
例如bulk文件时:curl -u username:password -H ‘Content-Type:application/x-ndjson’ -XPOST ‘123.456.789.111:9200/index_name/_bulk?pretty’ –data-binary @bulk.json
解决办法
直接上代码:
import net.sf.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Base64;
GET请求
public static void get() throws Exception {
// es7之后去掉了type,但是type依然存在,只是为默认值“_doc”,通过id查询时要加上
//换上自己的url
String stringUrl = "http://123.45.67.890:9200/index_name/_doc/123456";
URL url = new URL(stringUrl);
URLConnection uc = url.openConnection();
HttpURLConnection conn = (HttpURLConnection) uc;
// 替换为自己的 username 和 password
String userpass = "your_username" + ":" + "your_password";
byte[] encode = Base64.getEncoder().encode(userpass.getBytes("utf-8"));
String authString = new String(encode);
// Basic后面的空格必不可少
String basicAuth = "Basic " + authString;
conn.setRequestProperty("Authorization", basicAuth);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.connect();
System.out.println(conn.getResponseCode());
BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len;
byte[] arr = new byte[1024];
while((len=bis.read(arr))!= -1) {
bos.write(arr, 0, len);
bos.flush();
}
bos.close();
// 打印一下结果,该咋处理自己操作把
System.out.println(bos.toString("utf-8"));
}
POST请求
public static String post(String jsonText, String stringUrl) {
try {
URL url = new URL(stringUrl);
URLConnection uc = url.openConnection();
HttpURLConnection conn = (HttpURLConnection) uc;
String userpass = "your_username" + ":" + "your_password";
byte[] encode = Base64.getEncoder().encode(userpass.getBytes("utf-8"));
String authString = new String(encode);
String basicAuth = "Basic " + authString;
conn.setRequestProperty("Authorization", basicAuth);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.connect();
OutputStream out = conn.getOutputStream();
// 写入请求的字符串
out.write(jsonText.getBytes());
out.flush();
out.close();
BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len;
byte[] arr = new byte[1024];
while((len=bis.read(arr))!= -1) {
bos.write(arr, 0, len);
bos.flush();
}
bos.close();
String result = bos.toString("utf-8");
return result;
} catch (Exception e){
e.printStackTrace();
return null;
}
}
整明白了就点个赞呗!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/94922.html