zoukankan      html  css  js  c++  java
  • java 发送带Basic Auth认证的http post请求实例代码

    构造http header

    private static final String URL = "url";
    private static final String APP_KEY = "key";
    private static final String SECRET_KEY = "secret";
    
        /**
       * 构造Basic Auth认证头信息
       * 
       * @return
       */
      private String getHeader() {
        String auth = APP_KEY + ":" + SECRET_KEY;
        byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII")));
        String authHeader = "Basic " + new String(encodedAuth);
        return authHeader;
      }

    方式一:

    private void send(JPushObject pushObject) {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpPost post = new HttpPost(URL);
        System.out.println("要发送的数据" + JSON.toJSONString(pushObject));
        StringEntity myEntity = new StringEntity(JSON.toJSONString(pushObject), ContentType.APPLICATION_JSON); // 构造请求数据
        post.addHeader("Authorization", getHeader());
        post.setEntity(myEntity); // 设置请求体
        String responseContent = null; // 响应内容
        CloseableHttpResponse response = null;
        try {
            response = client.execute(post);
            System.out.println(JSON.toJSONString(response));
            if (response.getStatusLine().getStatusCode() == 200) {
                HttpEntity entity = response.getEntity();
                responseContent = EntityUtils.toString(entity, "UTF-8");
            }
            
            if (response != null) 
                response.close();
            if (client != null) 
                client.close();
            
            System.out.println("responseContent:" + responseContent);
            
        } catch(ClientProtocolException e) {
            e.printStackTrace();
        } catch(IOException e) {
            e.printStackTrace();
        } 
    }

    方式二:

    引用到的jar: httpclient-4.5.jar; httpcore-4.4.1.jar; commons-logging-1.2.jar; common-codec-1.9.jar

    import java.io.IOException;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.auth.AuthScope;
    import org.apache.http.auth.UsernamePasswordCredentials;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.CredentialsProvider;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.BasicCredentialsProvider;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.http.util.EntityUtils;
    
    public class HttpClientWithBasicAuth {
        
        public static void main(String args[])  {
        
            String host = "10.104.203.166";
            int port = 8080;
            String URI = "http://localhost/rest/channel/receipt";
            
            // 创建HttpClientBuilder
            httpClientBuilder httpClientBuilder = HttpClientBuilder.create();
            // 设置BasicAuth
            CredentialsProvider provider = new BasicCredentialsProvider();
            // Create the authentication scope
            AuthScope scope = new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM);
            // Create credential pair,在此处填写用户名和密码
            UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("root", "superuser");
            // Inject the credentials
            provider.setCredentials(scope, credentials);
            // Set the default credentials provider
            httpClientBuilder.setDefaultCredentialsProvider(provider);
            // HttpClient
            CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
            
            String result = "";
            HttpGet httpGet = null;
            HttpResponse httpResponse = null;
            HttpEntity entity = null;
            httpGet = new HttpGet("http://"+host+URI);
            try {
                httpResponse = closeableHttpClient.execute(httpGet);
                entity = httpResponse.getEntity();
                if( entity != null ){
                    result = EntityUtils.toString(entity);
                }
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            // 关闭连接
            closeableHttpClient.close();
            
            //
            System.out.println(result);
            
        }
    }

     方式三.

    import java.io.IOException;
    
    import net.sf.json.JSONObject;
    import net.spring.model.User;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    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.util.EntityUtils;
    import org.junit.Test;
    
    public class Client {
        @Test
        public void HttpPostData() {  
              try { 
                  HttpClient httpclient = new DefaultHttpClient();  
                  String uri = "http://localhost:8080/springMVC/user/getUserByName"; 
                  HttpPost httppost = new HttpPost(uri);   
                  //添加http头信息 
                  httppost.addHeader("Authorization", "your token"); //认证token 
                  httppost.addHeader("Content-Type", "application/json"); 
                  httppost.addHeader("User-Agent", "imgfornote");  
                  JSONObject obj = new JSONObject();
                  obj.put("name", "cwh"); 
                  httppost.setEntity(new StringEntity(obj.toString()));     
                  HttpResponse response;  
                  response = httpclient.execute(httppost);  
                  //检验状态码,如果成功接收数据  
                  int code = response.getStatusLine().getStatusCode();  
                  System.out.println(code+"code");
                  if (code == 200) {  
                      String rev = EntityUtils.toString(response.getEntity());//返回json格式: {"id": "","name": ""}         
                      obj= JSONObject.fromObject(rev);
                  
                      User user = (User)JSONObject.toBean(obj,User.class);
                      System.out.println("返回数据==="+user.toString());
                  } 
                  } catch (ClientProtocolException e) { 
                      e.printStackTrace();
                  } catch (IOException e) {  
                      e.printStackTrace();
                  } catch (Exception e) { 
                      e.printStackTrace();
                  } 
             }
    }
  • 相关阅读:
    java 九个预定义Class对象
    Android github上开源项目、酷炫的交互动画和视觉效果地址集合
    Axure多人协作
    尺取法
    android binder 机制二(client和普通server)
    11-11前的电商
    用minGW编译ffmpeg(供替换opencv中引用的ffmpeg库)
    设计模式_状态模式
    六句代码实现对文件按时间的重命名,
    在QML应用中实现threading多任务
  • 原文地址:https://www.cnblogs.com/rinack/p/7568020.html
Copyright © 2011-2022 走看看