java简单http身份验证不工作

java简单http身份验证不工作,java,rest,http-post,httpclient,Java,Rest,Http Post,Httpclient,我希望发出HTTP POST请求并使用生成的auth_令牌,但是while循环中的print语句只打印x-dnb-user=myusername&x-dnb-pwd=mypass,而不是打印从服务器收到的响应。我想不出哪里出了错。任何帮助都将不胜感激。此外,响应以字典形式给出,并且令牌存在于字典中的“授权”密钥中。在这种情况下,我如何检索令牌 public void sampleAuth(){ HttpClient client = new DefaultHttpClient()

我希望发出HTTP POST请求并使用生成的auth_令牌,但是while循环中的print语句只打印
x-dnb-user=myusername&x-dnb-pwd=mypass
,而不是打印从服务器收到的响应。我想不出哪里出了错。任何帮助都将不胜感激。此外,响应以字典形式给出,并且令牌存在于字典中的“授权”密钥中。在这种情况下,我如何检索令牌

public void sampleAuth(){
        HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("https://maxcvservices.dnb.com/rest/Authentication");
    try {
      ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
      nameValuePairs.add(new BasicNameValuePair("x-dnb-user","myemail"));
      nameValuePairs.add(new BasicNameValuePair("x-dnb-pwd","mypass"));
      post.setEntity(new UrlEncodedFormEntity(nameValuePairs));


      HttpResponse response = client.execute(post);
      BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
      String line = "";
      while ((line = rd.readLine()) != null) {
        System.out.println(line);
      }

    } catch (IOException e) {
      e.printStackTrace();
    }
    }
public void sampleAuth(){
HttpClient=new DefaultHttpClient();
HttpPost=新的HttpPost(“https://maxcvservices.dnb.com/rest/Authentication");
试一试{
ArrayList nameValuePairs=新的ArrayList();
添加(新的BasicNameValuePair(“x-dnb-user”、“myemail”);
添加(新的基本名称对(“x-dnb-pwd”、“mypass”);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=client.execute(post);
BufferedReader rd=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
字符串行=”;
而((line=rd.readLine())!=null){
系统输出打印项次(行);
}
}捕获(IOE异常){
e、 printStackTrace();
}
}

提前谢谢

我认为您可能缺少内容类型

post.setHeader("Content-type", "application/x-www-form-urlencoded");
此外,在启动rd.readLine响应之前,您可能应该检查响应的状态代码。服务器可能已经完全拒绝了您,并且没有行可读

int code = response.getStatusLine().getStatusCode();
if ( code == HttpStatus.SC_OK ) {
   // Now go fishing for the auth_token
   // Usually these things are returned as headers
} else {
   System.out.println( "You've been rejected, pal" );
}

我需要更多关于您期望的auth_令牌的详细信息,但我猜它在标题中的名称是“auth_key”或其他名称,因此您可以直接查找它。

嘿,Bob,谢谢您的回复。我确实收到了400码,这就是为什么我认为没有什么可读的。问题是文档说在HTTP头中传递userid和密码,但所有文档都指示我将userid和密码作为NameValuPairs传递,这就是我遵循的方法。你认为这可能是问题所在吗?如果是这样,我如何在post请求的标题中传递用户id和密码?我不知道,但是如果文档说是标题,那么就给它一个标题。此外,如果他们想要实际的Http基本身份验证,这是一个拥有自己的规范,它有自己的头和all:。如果HttpClient对此没有任何抽象,我会感到惊讶。