Java RESTful程序不工作
我想把这句话转换成: curl-tlsv1.2-k-X POST-H内容类型:application/json-u myuser:mypass-data binary@prueba_token.txt 进入java程序:Java RESTful程序不工作,java,web-services,rest,curl,Java,Web Services,Rest,Curl,我想把这句话转换成: curl-tlsv1.2-k-X POST-H内容类型:application/json-u myuser:mypass-data binary@prueba_token.txt 进入java程序: import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.Inpu
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import org.apache.commons.codec.binary.Base64;
public class VormetricClientToken {
public static void main(String[] args) throws NoSuchAlgorithmException, KeyManagementException, UnsupportedEncodingException {
new VormetricClientToken().DoIt();
}//main
private void DoIt() throws NoSuchAlgorithmException, KeyManagementException, UnsupportedEncodingException{
String credential = Base64.encodeBase64String("myuser:mypass".getBytes("UTF-8"));
try{
String https_url = "https://192.168.1.13/vts/rest/v1.0/tokenize/";
URL myurl = new URL(https_url);
HttpsURLConnection con = HttpsURLConnection)myurl.openConnection();
con.setHostnameVerifier(new HostnameVerifier(){
@Override
public boolean verify(String hostname, SSLSession session){
return true;
}
});
String ccNum = "9876-5432-1098-7654";
String jStr = "{\"tokengroup\" : \"pruebas\" , \"data\" : \""+ccNum+"\", \"format\" : \"random-luhn\"}";
con.setRequestProperty("Content-length", String.valueOf(jStr.length()));
con.setRequestProperty("Content-Type","application/json; charset=UTF-8");
byte[] ptext = jStr.getBytes("UTF-8");
con.setRequestProperty("Authorization","Basic "+credential);
con.setRequestMethod("POST");
con.setDoOutput(true);
try (DataOutputStream output = new DataOutputStream(con.getOutputStream())) {
output.write(jStr.getBytes());
}
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
BufferedReader rd= new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = "";
String strResponse = "";
while((line = rd.readLine()) != null) {
strResponse=strResponse+line;
}
con.disconnect();
System.out.println("POST response: "+strResponse);
}catch(MalformedURLException e) {
System.out.println("error vormetric token client malformed:"+e);
}catch(IOException e1){
System.out.println("error vormetric token client ioexception:"+e1);
e1.printStackTrace();
}//catch
}//doit
}//vormetricclienttoken
我一直收到这样的信息:
ioexception:java.io.ioexception:服务器为URL返回了HTTP响应代码400:
我已经尝试过使用Httpclient,但结果是一样的,我知道代码400意味着web服务不理解我发送的文本。但这和我在curl中使用的文本是一样的
如果您能对可能出现的错误提供一些帮助,我们将不胜感激,因为DataOutputStream是用于序列化Java对象的,您不希望这样
只需写入con.getOutputStream返回的流
此外,内容长度用大写字母L表示,该值应为以字节为单位的长度
您可以声明并初始化ptext,但不使用它
改为:
byte[] ptext = jStr.getBytes("UTF-8");
con.setRequestProperty("Content-length", String.valueOf(ptext.length));
// more code
try (OutputStream output = con.getOutputStream()) {
output.write(ptext);
}
尝试打开服务器上的日志文件,查看收到请求时的外观。谢谢,但请求未登录到web服务中,然后将其打开。如果你不能在web服务中做到这一点,也许容器可以做到,例如Tomcat有一个,或者。我检查了日志文件中的请求,但是只有来自curl的请求被注册,来自java的请求没有注册,但是如果你觉得我的java程序没问题,我想web服务可能有问题,而不是我的java程序,我将尝试wireshark,看看我是否能找到更多的东西。我做了您建议的更改,但仍然得到错误代码400,谢谢