【发布时间】:2019-09-05 18:19:04
【问题描述】:
我知道这个问题有几个答案,但似乎都不适用于我的情况。
我在 curl 中尝试做的操作是
curl -u 'user:pwd' https://localhost:8000/services/search/jobs --data search='search index=my_index'
例如,我可以在 python 中这样做:
import urllib
import httplib2
from xml.dom import minidom
baseurl = 'https://localhost:8000'
userName = 'user'
password = 'pwd'
searchQuery = 'index=my_index'
serverContent = httplib2.Http(disable_ssl_certificate_validation=True).request(baseurl + '/services/auth/login',
'POST', headers={}, body=urllib.parse.urlencode({'username':userName, 'password':password}))[1]
sessionKey = minidom.parseString(serverContent).getElementsByTagName('sessionKey')[0].childNodes[0].nodeValue
searchQuery = searchQuery.strip()
if not (searchQuery.startswith('search') or searchQuery.startswith("|")):
searchQuery = 'search ' + searchQuery
print (httplib2.Http(disable_ssl_certificate_validation=True).request(baseurl + '/services/search/jobs','POST',
headers={'Authorization': 'Splunk %s' % sessionKey},body=urllib.parse.urlencode({'search': searchQuery}))[1])
但我为 java 研究的每个解决方案似乎都不适用于我。 Java 中是否有 httplib2.Http(disable_ssl_certificate_validation=True).request(...) 的等价物?
这是我尝试过的
String rawData = "search='search index=my_index'";
System.out.println(rawData);
String encodedData = URLEncoder.encode( rawData, "UTF-8" );
String name = "user";
String password = "pwd";
String authString = name + ":" + password;
System.out.println("auth string: " + authString);
byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
String authStringEnc = new String(authEncBytes);
URL u = new URL("https://localhost:8000/services/search/jobs");
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Basic " + authStringEnc);
conn.setRequestProperty("Content-Type", "application/json; utf-8");
conn.setRequestProperty( "Content-Length", String.valueOf(encodedData.length()));
InputStream is = conn.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
int code = conn.getResponseCode();
System.out.println("Response (Code):" + code);
System.out.println("Response (Message):" + conn.getResponseMessage());
DataInputStream input = new DataInputStream(conn.getInputStream());
int c;
StringBuilder resultBuf = new StringBuilder();
while ((c = input.read()) != -1) {
resultBuf.append((char) c);
}
input.close();
System.out.print(resultBuf.toString());**/
【问题讨论】:
-
你尝试了什么?发生了什么?
-
mkyong.com/java/how-to-send-http-request-getpost-in-java 和 stackoverflow.com/questions/3324717/… 但是这两个似乎都返回了不正确的 xml 数据。它只是应该像在 python 和终端中使用 curl 命令一样返回一个 SID。
-
你确定你应该使用
DataInputStream吗?它用于 Java 特定的数据序列化协议。
标签: java http post request httprequest